DYT/Tool/OpenSceneGraph-3.6.5/include/geos/precision/CommonBits.h

98 lines
2.4 KiB
C
Raw Normal View History

2024-12-24 23:49:36 +00:00
/**********************************************************************
*
* GEOS - Geometry Engine Open Source
* http://geos.osgeo.org
*
* Copyright (C) 2005-2006 Refractions Research Inc.
*
* This is free software; you can redistribute and/or modify it under
* the terms of the GNU Lesser General Public Licence as published
* by the Free Software Foundation.
* See the COPYING file for more information.
*
**********************************************************************/
#pragma once
#include <geos/export.h>
#include <cstdint>
namespace geos {
namespace precision { // geos.precision
/** \brief
* Determines the maximum number of common most-significant
* bits in the mantissa of one or numbers.
*
* Can be used to compute the double-precision number which
* is represented by the common bits.
* If there are no common bits, the number computed is 0.0.
*
*/
class GEOS_DLL CommonBits {
private:
bool isFirst;
int commonMantissaBitsCount;
int64_t commonBits;
int64_t commonSignExp;
public:
/** \brief
* Computes the bit pattern for the sign and exponent of a
* double-precision number.
*
* @param num
* @return the bit pattern for the sign and exponent
*/
static int64_t signExpBits(int64_t num);
/** \brief
* This computes the number of common most-significant
* bits in the mantissas of two double-precision numbers.
*
* It does not count the hidden bit, which is always 1.
* It does not determine whether the numbers have the same
* exponent - if they do not, the value computed by this
* function is meaningless.
* @param num1
* @param num2
* @return the number of common most-significant mantissa bits
*/
static int numCommonMostSigMantissaBits(int64_t num1, int64_t num2);
/** \brief
* Zeroes the lower n bits of a bitstring.
*
* @param bits the bitstring to alter
* @param nBits the number of bits to zero
* @return the zeroed bitstring
*/
static int64_t zeroLowerBits(int64_t bits, int nBits);
/** \brief
* Extracts the i'th bit of a bitstring.
*
* @param bits the bitstring to extract from
* @param i the bit to extract
* @return the value of the extracted bit
*/
static int getBit(int64_t bits, int i);
CommonBits();
void add(double num);
double getCommon();
};
} // namespace geos.precision
} // namespace geos