Files
secondo/Algebras/Histogram/HistogramUtils.h
2026-01-23 17:03:45 +08:00

146 lines
3.1 KiB
C++

/*
----
This file is part of SECONDO.
Copyright (C) 2004, University in Hagen, Department of Computer Science,
Database Systems for New Applications.
SECONDO is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
SECONDO is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SECONDO; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
----
//paragraph [1] Title: [{\Large \bf \begin {center}] [\end {center}}]
//[TOC] [\tableofcontents]
//[_][\_]
//[&][\&]
//characters [1] verbatim: [\verb@] [@]
//[TOC] [\tableofcontents]
""[1]
[1] Header File Histogram1d
December 2007, S. H[oe]cher, M. H[oe]ger, A. Belz, B. Poneleit
[TOC]
1 Overview
The file "HistogramUtils.h" contains declarations of helper functions
that are not attached to specific classes or operators.
2 Defines and includes
It includes "HistogramBase.h" which contains declarations of functions common
to both histogram1d and histogram2d.
*/
#ifndef HISTOGRAMUTILS_H_
#define HISTOGRAMUTILS_H_
#include "HistogramBase.h"
#include "AlmostEqual.h"
namespace hgr
{
/*
2 Functions and Constants
2.1 CmpReal(HIST[_]REAL, HIST[_]REAL)
Compares two real values using an absolute tolerance value
given by the constant FACTOR defined in the SECONDO environment.
returns 0 if a == b,
returns -1 if a $<$ b,
returns 1 if a $>$ b
*/
inline int CmpReal(const HIST_REAL& a, const HIST_REAL& b)
{
if (fabs(a - b) < FACTOR)
return 0;
if (a < b)
return -1;
return 1;
}
/*
2.2 AlmostEqual(HIST[_]REAL, HIST[_]REAL)
Tests two real values for equality using an absolute tolerance value
given by the constant FACTOR defined in the SECONDO environment.
returns true if a == b and false otherwise.
*/
inline bool AlmostEqual(const HIST_REAL& a, const HIST_REAL& b)
{
return fabs(a - b) < FACTOR;
}
/*
2.3 HashValue(HIST[_]REAL)
Hash function for HIST[_]REAL.
The algorithm is taken from the implementation of CcReal.
*/
inline size_t HashValue(const HIST_REAL realval)
{
unsigned long h = 0;
const char* s = (const char*)(&realval);
for (unsigned int i = 1; i <= sizeof(HIST_REAL); i++)
{
h = 5 * h + *s;
s++;
}
return size_t(h);
}
/*
2.4 const size[_]t BITSIZE[_]SIZE[_]T[_]MINUS[_]1
This constant equals the number of bits of the datatype size[_]t minus 1.
*/
const size_t BITSIZE_SIZE_T_MINUS_1 = sizeof(size_t) * CHAR_BIT - 1;
/*
2.5 Rotate(size[_]t)
Returns the bitwise by one left rotated parameter value.
Example: Rotate( 1110001 ) == 1100011
*/
inline size_t Rotate(size_t val)
{
return (val << 1) | (val >> BITSIZE_SIZE_T_MINUS_1);
}
} // namespace hgr
#endif /*HISTOGRAMUTILS_H_*/