From 3ea9ed0d2a14468d698dfe24bdb790b6f4103596 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sat, 4 Aug 2018 19:12:43 +0200 Subject: Initial import --- Hilbert/Hilbert.hpp | 142 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 Hilbert/Hilbert.hpp (limited to 'Hilbert/Hilbert.hpp') diff --git a/Hilbert/Hilbert.hpp b/Hilbert/Hilbert.hpp new file mode 100644 index 0000000..bd39962 --- /dev/null +++ b/Hilbert/Hilbert.hpp @@ -0,0 +1,142 @@ +/* + * Copyright (C) 2006-2007 Chris Hamilton + * Copyright (C) 2015 David Robillard + * + * This program 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. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef _HILBERT_HPP_ +#define _HILBERT_HPP_ + + +#include +#include +#include + +// Description of parameters: +// +// FOR REGULAR HILBERT INDICES +// +// CFixBitVec/CBigBitVec *p +// Pointer to array of non-negative coordinate values. +// +// int m +// Precision of all coordinate values (number of bits required to +// represent the largest possible coordinate value). +// +// int n +// Number of dimensions (size of the array *p). +// +// CFixBitVec/CBigBitVec &h +// Hilbert index of maximum precision m*n. +// +// int *ms +// Array of precision values, one per dimension. +// +// FOR COMPACT HILBERT INDICES +// +// CFixBitVec/CBigBitVec &hc +// Compact Hilbert index of maximum precision M. +// +// int M +// Net precision value, corresponding to the size of the compact +// Hilbert code. If not provided, defaults to zero and will be calculated +// by the function (sum_i { ms[i] }). +// +// int m +// Largest precision value (max_i { ms[i] }). If not provided, defaults +// to zero and will be calculated by the function, + + +namespace Hilbert +{ + +// fix -> fix + +inline void coordsToIndex( const CFixBitVec *p, int m, int n, CFixBitVec &h ) +{ + coordsToIndex(p,m,n,h); +} + +inline void indexToCoords( CFixBitVec *p, int m, int n, const CFixBitVec &h ) +{ + indexToCoords(p,m,n,h); +} + +inline void coordsToCompactIndex( const CFixBitVec *p, const int *ms, int n, + CFixBitVec &hc, int M, int m ) +{ + coordsToCompactIndex(p,ms,n,hc,M,m); +} + +inline void compactIndexToCoords( CFixBitVec *p, const int *ms, int n, + const CFixBitVec &hc, int M, int m ) +{ + compactIndexToCoords(p,ms,n,hc,M,m); +} + +// fix -> big + +inline void coordsToIndex( const CFixBitVec *p, int m, int n, CBigBitVec &h ) +{ + coordsToIndex(p,m,n,h); +} + +inline void indexToCoords( CFixBitVec *p, int m, int n, const CBigBitVec &h ) +{ + indexToCoords(p,m,n,h); +} + +inline void coordsToCompactIndex( const CFixBitVec *p, const int *ms, int n, + CBigBitVec &hc, int M, int m ) +{ + coordsToCompactIndex(p,ms,n,hc,M,m); +} + +inline void compactIndexToCoords( CFixBitVec *p, const int *ms, int n, + const CBigBitVec &hc, int M, int m ) +{ + compactIndexToCoords(p,ms,n,hc,M,m); +} + +// big -> big + +inline void coordsToIndex( const CBigBitVec *p, int m, int n, CBigBitVec &h ) +{ + coordsToIndex(p,m,n,h); +} + +inline void indexToCoords( CBigBitVec *p, int m, int n, const CBigBitVec &h ) +{ + indexToCoords(p,m,n,h); +} + +inline void coordsToCompactIndex( const CBigBitVec *p, const int *ms, int n, + CBigBitVec &hc, int M, int m ) +{ + coordsToCompactIndex(p,ms,n,hc,M,m); +} + +inline void compactIndexToCoords( CBigBitVec *p, const int *ms, int n, + const CBigBitVec &hc, int M, int m ) +{ + compactIndexToCoords(p,ms,n,hc,M,m); +} + +}; + + +#endif + -- cgit v1.2.1