/* Copyright (C) 2018 David Robillard Copyright (C) 2006-2007 Chris Hamilton 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, see . */ #ifndef CHILBERT_HILBERT_HPP #define CHILBERT_HILBERT_HPP #include "chilbert/Algorithm.hpp" #include "chilbert/BigBitVec.hpp" #include "chilbert/FixBitVec.hpp" // 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 chilbert { // 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); } } // namespace chilbert #endif