DGtal  1.3.beta
ImageContainerByHashTree.h
1 
17 #pragma once
18 
32 #if defined(ImageContainerByHashTree_RECURSES)
33 #error Recursive header files inclusion detected in ImageContainerByHashTree.h
34 #else // defined(ImageContainerByHashTree_RECURSES)
35 
36 #define ImageContainerByHashTree_RECURSES
37 
38 #if !defined ImageContainerByHashTree_h
39 
40 #define ImageContainerByHashTree_h
41 
43 // Inclusions
44 #include <iostream>
45 #include "DGtal/base/Common.h"
46 #include "DGtal/base/CLabel.h"
47 #include "DGtal/base/ConstRangeAdapter.h"
48 #include "DGtal/images/DefaultConstImageRange.h"
49 #include "DGtal/images/DefaultImageRange.h"
50 
51 #include "DGtal/kernel/domains/CDomain.h"
52 #include "DGtal/kernel/domains/HyperRectDomain.h"
53 #include "DGtal/kernel/SpaceND.h"
54 #include "DGtal/base/Bits.h"
55 #include "DGtal/images/Morton.h"
56 #include "DGtal/images/SetValueIterator.h"
57 #include "DGtal/io/Color.h"
58 #include "DGtal/base/ExpressionTemplates.h"
60 
61 namespace DGtal
62 {
63  namespace experimental
64  {
66  // template class ImageContainerByHashTree
127  template < typename TDomain, typename TValue, typename THashKey = typename DGtal::uint64_t >
129  {
130 
131  protected:
132  class Node;
133 
134 
135  public:
136 
138 
139  typedef THashKey HashKey;
140 
143  typedef TDomain Domain;
144  typedef typename Domain::Point Point;
145  typedef typename Domain::Vector Vector;
146  typedef typename Domain::Integer Integer;
147  typedef typename Domain::Size Size;
148  typedef typename Domain::Dimension Dimension;
149  typedef Point Vertex;
150 
152  BOOST_STATIC_CONSTANT( Dimension, dimension = Domain::dimension);
153  BOOST_STATIC_CONSTANT( Dimension, dim = Domain::dimension);
155  BOOST_STATIC_CONSTANT( unsigned int, NbChildrenPerNode = PowHelper::VALUE);
156  BOOST_STATIC_CONSTANT( HashKey, ROOT_KEY = static_cast<THashKey>(1));
157 
159  //(since constructed from two points as a bounding box)
160  BOOST_STATIC_ASSERT ((boost::is_same< Domain,
162 
165  typedef TValue Value;
166  //typedef ConstRangeAdapter<typename Domain::ConstIterator, Self, Value > ConstRange;
169 
172 
173 
174 
192  ImageContainerByHashTree(const unsigned int hashKeySize,
193  const unsigned int depth,
194  const Value defaultValue);
195 
214  ImageContainerByHashTree(const unsigned int hashKeySize,
215  const Point & p1,
216  const Point & p2,
217  const Value defaultValue);
218 
235  ImageContainerByHashTree(const Domain &aDomain,
236  const unsigned int hashKeySize = 3,
237  const Value defaultValue= NumberTraits<Value>::ZERO);
238 
239 
240  // TODO
241  // /*
242  // * Copy contructor.
243  // *
244  // * @param other object to copy.
245  // */
246  // ImageContainerByHashTree(const ImageContainerByHashTree<Domain, Value>& other);
247 
248  // /*
249  // * Assignment.
250  // *
251  // * @param other object to copy.
252  // */
253  // ImageContainerByHashTree(const ImageContainerByHashTree<Domain, Value>& other);
254 
255  // /*
256  // * Destructor
257  // * Free the memory allocated by @a myData
258  // */
259  // ~ImageContainerByHashTree();
260 
261 
265  const Domain &domain() const;
266 
271  ConstRange constRange() const;
272 
277  Range range() ;
278 
283  const Self & container() const { return *this; };
288  Self & container() { return *this; };
289 
294  const Node** & data() const noexcept { return myData; };
299  Node** & data() noexcept { return myData; };
300 
315  Value get(const HashKey key) const;
316 
317 
324  Value operator () (const HashKey key) const;
325 
332  Value operator()(const Point &aPoint) const;
333 
339  Value get(const Point & aPoint) const;
340 
341 
349  Value upwardGet(const HashKey key) const ;
350 
358  Value reverseGet(const HashKey key) const;
359 
360 
371  void setValue(const HashKey key, const Value object);
372 
383  void setValue(const Point& aPoint, const Value object);
384 
391  inline unsigned int getSpanSize() const
392  {
393  return mySpanSize;
394  }
395 
400  inline unsigned int getDepth() const
401  {
402  return myTreeDepth;
403  }
404 
413  bool isKeyValid(HashKey key) const;
414 
422  bool checkIntegrity(HashKey key = ROOT_KEY, bool leafAbove = false) const;
423 
424  int myDebugCounter; //debug
425 
426  //stuff that might be moved out of the class for reusability
427  HashKey getKey(const Point & aPoint) const;
428 
429  unsigned int getKeyDepth(HashKey key) const;
430 
431  int* getCoordinatesFromKey(HashKey key) const;
432 
440  void printState(std::ostream& out, bool displayKeys = false) const;
441 
450  void printTree(HashKey key, std::ostream& out, bool displayKeys) const;
451 
460  void printInternalState(std::ostream& out, unsigned int nbBits = 0) const;
461 
476  void printInfo(std::ostream& out) const;
477 
481  unsigned int getNbEmptyLists() const;
482 
487  double getAverageCollisions() const;
488 
492  unsigned int getMaxCollisions() const;
493 
500  unsigned int getNbNodes(unsigned int intermediateKey) const;
501 
505  unsigned int getNbNodes()const;
506 
507 
508  // -------------------------------------------------------------
516  class Iterator
517  {
518  public:
519  Iterator(Node** data, unsigned int position, unsigned int arraySize)
520  {
521  myArraySize = arraySize;
523  myNode = data[0];
524  myCurrentCell = position;
525  while ((!myNode) && (myCurrentCell < myArraySize))
526  {
528  }
529  }
530  bool isAtEnd()const
531  {
532  return myCurrentCell >= myArraySize;
533  }
535  {
536  return myNode->getObject();
537  }
539  {
540  return next();
541  }
542  bool operator == (const Iterator& it)
543  {
544  if (isAtEnd() && it.isAtEnd())
545  return true;
546  else
547  return (myNode == it.myNode);
548  }
549  bool operator != (const Iterator& it)
550  {
551  if (isAtEnd() && it.isAtEnd())
552  return false;
553  else
554  return (myNode != it.myNode);
555  }
556  inline HashKey getKey() const
557  {
558  return myNode->getKey();
559  }
560  bool next();
561  protected:
563  unsigned int myCurrentCell;
564  unsigned int myArraySize;
566  };
567 
572  {
573  return Iterator(myData, 0, myArraySize);
574  }
575 
580  {
582  }
583 
584  void selfDisplay(std::ostream & out) const;
585 
586  bool isValid() const
587  {
588  return checkIntegrity();
589  }
590 
591  // ------------- realization CDrawableWithBoard2D --------------------
592  private:
593 
594 
595  public:
600  //DrawableWithBoard2D* defaultStyle() const;
601 
605  std::string className() const;
606 
607  protected:
608 
609  template <typename C>
610  void
611  recursiveDraw(HashKey key, const double p1[2], const double len, Board2D & board, const C& cmap) const;
612 
613 
614  // -------------------------------------------------------------
621  class Node
622  {
623  public:
624 
631  Node(Value aValue, HashKey key)
632  {
633  myData = aValue;
634  myKey = key;
635  }
636 
640  inline Node* getNext()
641  {
642  return myNext;
643  }
644 
645 
651  inline void setNext(Node* next)
652  {
653  myNext = next;
654  }
655 
660  inline HashKey getKey()
661  {
662  return myKey;
663  }
664 
669  inline Value& getObject()
670  {
671  return myData;
672  }
673  ~Node() { }
674  protected:
678  };// -----------------------------------------------------------
679 
680 
688  inline HashKey getIntermediateKey(const HashKey key) const;
689 
690 
700  Node* addNode(const Value object, const HashKey key)
701  {
702  Node* n = getNode(key);
703  if (n)
704  {
705  n->getObject() = object;
706  //n->setObject(object);
707  return n;
708  }
709  n = new Node(object, key);
710  HashKey key2 = getIntermediateKey(key);
711  n->setNext(myData[key2]);
712  myData[key2] = n;
713  return n;
714  }
715 
716  public:
724  inline Node* getNode(const HashKey key) const // very used !! // public because Display2DFactory !!!
725  {
726  Node* iter = myData[getIntermediateKey(key)];
727  while (iter != 0)
728  {
729  if (iter->getKey() == key)
730  return iter;
731  iter = iter->getNext();
732  }
733  return 0;
734  }
735  protected:
736 
742  bool removeNode(HashKey key);
743 
749  void recursiveRemoveNode(HashKey key, unsigned int nbRecursions);
750 
751 
758  void setDepth(unsigned int depth);
759 
766  Value blendChildren(HashKey key) const;
767 
768 
769  //----------------------- internal data --------------------------------
770  protected:
771 
776 
781 
787  unsigned int myKeySize;
788 
789  unsigned int myArraySize;
790 
794  unsigned int myTreeDepth;
795 
796  unsigned int mySpanSize;
797 
798 
799  // myN is number of children per node.
800  BOOST_STATIC_CONSTANT( unsigned int, myN = NbChildrenPerNode );
801 
802 
803  public:
804  Point myOrigin; // public because Display2DFactory !!!
805  protected:
806 
811  HashKey myPreComputedIntermediateMask; // ~((~0) << _keySize)
812 
813  public:
815  Morton<HashKey, Point> myMorton; // public because Display2DFactory !!!
816 
817 
818  };
819 
826  template<typename TDomain, typename TValue, typename THashKey >
827  std::ostream&
829  {
830  object.selfDisplay( out);
831  return out;
832  }
833 
834 
835 }
836 } // namespace DGtal
837 
839 // Includes inline functions.
840 #include "DGtal/images/ImageContainerByHashTree.ih"
841 
842 // //
844 
845 #endif // !defined ImageContainerByHashTree_h
846 
847 #undef ImageContainerByHashTree_RECURSES
848 #endif // else defined(ImageContainerByHashTree_RECURSES)
DGtal::POW
Definition: ExpressionTemplates.h:53
DGtal::experimental::ImageContainerByHashTree::getDepth
unsigned int getDepth() const
Definition: ImageContainerByHashTree.h:400
DGtal::experimental::ImageContainerByHashTree::get
Value get(const HashKey key) const
DGtal::experimental::ImageContainerByHashTree::Integer
Domain::Integer Integer
Definition: ImageContainerByHashTree.h:146
DGtal::experimental::ImageContainerByHashTree::blendChildren
Value blendChildren(HashKey key) const
DGtal::experimental::ImageContainerByHashTree::Iterator::getKey
HashKey getKey() const
Definition: ImageContainerByHashTree.h:556
DGtal::experimental::ImageContainerByHashTree::Iterator
Built-in iterator on an HashTree. This iterator visits all node in the tree.
Definition: ImageContainerByHashTree.h:516
DGtal::HyperRectDomain< Space >::Dimension
Space::Dimension Dimension
Definition: HyperRectDomain.h:116
DGtal::experimental::ImageContainerByHashTree::BOOST_STATIC_ASSERT
BOOST_STATIC_ASSERT((boost::is_same< Domain, HyperRectDomain< typename Domain::Space > >::value))
domain should be rectangular
DGtal::experimental::ImageContainerByHashTree::myArraySize
unsigned int myArraySize
Definition: ImageContainerByHashTree.h:789
DGtal::experimental::ImageContainerByHashTree::Dimension
Domain::Dimension Dimension
Definition: ImageContainerByHashTree.h:148
DGtal::experimental::ImageContainerByHashTree::myDomain
Domain myDomain
Definition: ImageContainerByHashTree.h:775
DGtal::HyperRectDomain
Aim: Parallelepidec region of a digital space, model of a 'CDomain'.
Definition: HyperRectDomain.h:99
DGtal::experimental::ImageContainerByHashTree::reverseGet
Value reverseGet(const HashKey key) const
DGtal::experimental::ImageContainerByHashTree::Node::myKey
HashKey myKey
Definition: ImageContainerByHashTree.h:675
DGtal::experimental::ImageContainerByHashTree::Iterator::operator!=
bool operator!=(const Iterator &it)
Definition: ImageContainerByHashTree.h:549
DGtal::experimental::ImageContainerByHashTree::className
std::string className() const
DGtal::experimental::ImageContainerByHashTree::Iterator::myArraySize
unsigned int myArraySize
Definition: ImageContainerByHashTree.h:564
DGtal::experimental::ImageContainerByHashTree::operator()
Value operator()(const HashKey key) const
DGtal::NumberTraits
Aim: The traits class for all models of Cinteger.
Definition: NumberTraits.h:531
DGtal::experimental::ImageContainerByHashTree::Value
TValue Value
Definition: ImageContainerByHashTree.h:165
DGtal::experimental::ImageContainerByHashTree::mySpanSize
unsigned int mySpanSize
Definition: ImageContainerByHashTree.h:796
DGtal::POW::VALUE
@ VALUE
Definition: ExpressionTemplates.h:55
DGtal::experimental::ImageContainerByHashTree::Node::getNext
Node * getNext()
Definition: ImageContainerByHashTree.h:640
DGtal::experimental::ImageContainerByHashTree::printInfo
void printInfo(std::ostream &out) const
DGtal::experimental::ImageContainerByHashTree::getCoordinatesFromKey
int * getCoordinatesFromKey(HashKey key) const
DGtal::experimental::ImageContainerByHashTree::container
const Self & container() const
Definition: ImageContainerByHashTree.h:283
aPoint
const Point aPoint(3, 4)
DGtal::experimental::ImageContainerByHashTree::Iterator::myNode
Node * myNode
Definition: ImageContainerByHashTree.h:562
DGtal::experimental::ImageContainerByHashTree::getMaxCollisions
unsigned int getMaxCollisions() const
DGtal::experimental::ImageContainerByHashTree::checkIntegrity
bool checkIntegrity(HashKey key=ROOT_KEY, bool leafAbove=false) const
DGtal::experimental::ImageContainerByHashTree::ImageContainerByHashTree
ImageContainerByHashTree(const unsigned int hashKeySize, const unsigned int depth, const Value defaultValue)
DGtal::experimental::ImageContainerByHashTree
Model of CImageContainer implementing the association key<->Value using a hash tree....
Definition: ImageContainerByHashTree.h:128
DGtal::experimental::ImageContainerByHashTree::Node::myNext
Node * myNext
Definition: ImageContainerByHashTree.h:676
DGtal::experimental::ImageContainerByHashTree::Node::setNext
void setNext(Node *next)
Definition: ImageContainerByHashTree.h:651
DGtal::experimental::ImageContainerByHashTree::Vertex
Point Vertex
Definition: ImageContainerByHashTree.h:149
DGtal::experimental::ImageContainerByHashTree::getNode
Node * getNode(const HashKey key) const
Definition: ImageContainerByHashTree.h:724
DGtal::experimental::ImageContainerByHashTree::getAverageCollisions
double getAverageCollisions() const
DGtal::experimental::ImageContainerByHashTree::Domain
TDomain Domain
Definition: ImageContainerByHashTree.h:143
dim
unsigned int dim(const Vector &z)
Definition: viewDualSurface.cpp:174
DGtal::experimental::ImageContainerByHashTree::myKeySize
unsigned int myKeySize
Definition: ImageContainerByHashTree.h:787
DGtal::experimental::ImageContainerByHashTree::constRange
ConstRange constRange() const
DGtal::experimental::ImageContainerByHashTree::data
Node **& data() noexcept
Definition: ImageContainerByHashTree.h:299
DGtal::experimental::ImageContainerByHashTree::printTree
void printTree(HashKey key, std::ostream &out, bool displayKeys) const
DGtal::experimental::ImageContainerByHashTree::data
const Node **& data() const noexcept
Definition: ImageContainerByHashTree.h:294
DGtal::experimental::ImageContainerByHashTree::Iterator::operator*
Value & operator*()
Definition: ImageContainerByHashTree.h:534
DGtal::experimental::ImageContainerByHashTree::Node::~Node
~Node()
Definition: ImageContainerByHashTree.h:673
DGtal::experimental::ImageContainerByHashTree::Range
DefaultImageRange< Self > Range
Definition: ImageContainerByHashTree.h:168
DGtal::HyperRectDomain< Space >::Size
Space::Size Size
Definition: HyperRectDomain.h:117
DGtal::DefaultConstImageRange
Aim: model of CConstBidirectionalRangeFromPoint that adapts the domain of an image in order to iterat...
Definition: DefaultConstImageRange.h:76
DGtal::experimental::ImageContainerByHashTree::PowHelper
POW< 2, dimension > PowHelper
Definition: ImageContainerByHashTree.h:154
DGtal::experimental::ImageContainerByHashTree::myOrigin
Point myOrigin
Definition: ImageContainerByHashTree.h:804
DGtal::experimental::ImageContainerByHashTree::myDebugCounter
int myDebugCounter
Definition: ImageContainerByHashTree.h:424
DGtal::experimental::ImageContainerByHashTree::printInternalState
void printInternalState(std::ostream &out, unsigned int nbBits=0) const
DGtal::DefaultImageRange
Aim: model of CConstBidirectionalRangeFromPoint and CBidirectionalRangeWithWritableIteratorFromPoint ...
Definition: DefaultImageRange.h:76
DGtal::experimental::ImageContainerByHashTree::Iterator::next
bool next()
DGtal::experimental::ImageContainerByHashTree::Node::getObject
Value & getObject()
Definition: ImageContainerByHashTree.h:669
DGtal::experimental::ImageContainerByHashTree::getNbEmptyLists
unsigned int getNbEmptyLists() const
DGtal::concepts::CDomain
Aim: This concept represents a digital domain, i.e. a non mutable subset of points of the given digit...
Definition: CDomain.h:129
DGtal::experimental::ImageContainerByHashTree::myMorton
Morton< HashKey, Point > myMorton
The morton code computer.
Definition: ImageContainerByHashTree.h:815
DGtal
DGtal is the top-level namespace which contains all DGtal functions and types.
DGtal::experimental::ImageContainerByHashTree::isValid
bool isValid() const
Definition: ImageContainerByHashTree.h:586
DGtal::experimental::ImageContainerByHashTree::HashKey
THashKey HashKey
Definition: ImageContainerByHashTree.h:139
DGtal::experimental::ImageContainerByHashTree::isKeyValid
bool isKeyValid(HashKey key) const
DGtal::experimental::ImageContainerByHashTree::printState
void printState(std::ostream &out, bool displayKeys=false) const
DGtal::SetValueIterator
Aim: implements an output iterator, which is able to write values in an underlying image,...
Definition: SetValueIterator.h:67
DGtal::experimental::ImageContainerByHashTree::Self
ImageContainerByHashTree< TDomain, TValue, THashKey > Self
Definition: ImageContainerByHashTree.h:132
DGtal::experimental::ImageContainerByHashTree::OutputIterator
SetValueIterator< Self > OutputIterator
output iterator
Definition: ImageContainerByHashTree.h:171
DGtal::experimental::ImageContainerByHashTree::Point
Domain::Point Point
Definition: ImageContainerByHashTree.h:144
DGtal::experimental::ImageContainerByHashTree::Iterator::myContainerData
Node ** myContainerData
Definition: ImageContainerByHashTree.h:565
DGtal::Morton
Aim: Implements the binary Morton code construction in nD.
Definition: Morton.h:77
DGtal::experimental::ImageContainerByHashTree::getKey
HashKey getKey(const Point &aPoint) const
DGtal::experimental::ImageContainerByHashTree::Iterator::operator++
bool operator++()
Definition: ImageContainerByHashTree.h:538
DGtal::experimental::ImageContainerByHashTree::getKeyDepth
unsigned int getKeyDepth(HashKey key) const
DGtal::experimental::ImageContainerByHashTree::Iterator::operator==
bool operator==(const Iterator &it)
Definition: ImageContainerByHashTree.h:542
DGtal::experimental::ImageContainerByHashTree::myDepthMask
HashKey myDepthMask
Definition: ImageContainerByHashTree.h:810
DGtal::experimental::ImageContainerByHashTree::ConstRange
DefaultConstImageRange< Self > ConstRange
Definition: ImageContainerByHashTree.h:167
DGtal::experimental::operator<<
std::ostream & operator<<(std::ostream &out, const ImageContainerByHashTree< TDomain, TValue, THashKey > &object)
Definition: ImageContainerByHashTree.h:828
DGtal::experimental::ImageContainerByHashTree::BOOST_CONCEPT_ASSERT
BOOST_CONCEPT_ASSERT((concepts::CDomain< TDomain >))
domain
DGtal::experimental::ImageContainerByHashTree::Node
Definition: ImageContainerByHashTree.h:621
DGtal::experimental::ImageContainerByHashTree::BOOST_STATIC_CONSTANT
BOOST_STATIC_CONSTANT(Dimension, dimension=Domain::dimension)
static constants
DGtal::experimental::ImageContainerByHashTree::Iterator::Iterator
Iterator(Node **data, unsigned int position, unsigned int arraySize)
Definition: ImageContainerByHashTree.h:519
DGtal::concepts::CLabel
Aim: Define the concept of DGtal labels. Models of CLabel can be default-constructible,...
Definition: CLabel.h:91
DGtal::experimental::ImageContainerByHashTree::setDepth
void setDepth(unsigned int depth)
DGtal::Board2D
Aim: This class specializes a 'Board' class so as to display DGtal objects more naturally (with <<)....
Definition: Board2D.h:70
DGtal::experimental::ImageContainerByHashTree::recursiveRemoveNode
void recursiveRemoveNode(HashKey key, unsigned int nbRecursions)
DGtal::experimental::ImageContainerByHashTree::Iterator::isAtEnd
bool isAtEnd() const
Definition: ImageContainerByHashTree.h:530
DGtal::experimental::ImageContainerByHashTree::recursiveDraw
void recursiveDraw(HashKey key, const double p1[2], const double len, Board2D &board, const C &cmap) const
DGtal::experimental::ImageContainerByHashTree::range
Range range()
DGtal::experimental::ImageContainerByHashTree::myPreComputedIntermediateMask
HashKey myPreComputedIntermediateMask
Definition: ImageContainerByHashTree.h:811
DGtal::experimental::ImageContainerByHashTree::end
Iterator end()
Definition: ImageContainerByHashTree.h:579
DGtal::HyperRectDomain< Space >::Integer
Space::Integer Integer
Definition: HyperRectDomain.h:114
DGtal::PointVector< dim, Integer >
DGtal::experimental::ImageContainerByHashTree::Vector
Domain::Vector Vector
Definition: ImageContainerByHashTree.h:145
DGtal::experimental::ImageContainerByHashTree::Iterator::myCurrentCell
unsigned int myCurrentCell
Definition: ImageContainerByHashTree.h:563
DGtal::experimental::ImageContainerByHashTree::domain
const Domain & domain() const
DGtal::experimental::ImageContainerByHashTree::Node::getKey
HashKey getKey()
Definition: ImageContainerByHashTree.h:660
DGtal::experimental::ImageContainerByHashTree::addNode
Node * addNode(const Value object, const HashKey key)
Definition: ImageContainerByHashTree.h:700
DGtal::experimental::ImageContainerByHashTree::myData
Node ** myData
Definition: ImageContainerByHashTree.h:780
DGtal::experimental::ImageContainerByHashTree::removeNode
bool removeNode(HashKey key)
DGtal::experimental::ImageContainerByHashTree::container
Self & container()
Definition: ImageContainerByHashTree.h:288
DGtal::experimental::ImageContainerByHashTree::upwardGet
Value upwardGet(const HashKey key) const
DGtal::experimental::ImageContainerByHashTree::myTreeDepth
unsigned int myTreeDepth
Definition: ImageContainerByHashTree.h:794
DGtal::experimental::ImageContainerByHashTree::begin
Iterator begin()
Definition: ImageContainerByHashTree.h:571
DGtal::experimental::ImageContainerByHashTree::selfDisplay
void selfDisplay(std::ostream &out) const
DGtal::experimental::ImageContainerByHashTree::getIntermediateKey
HashKey getIntermediateKey(const HashKey key) const
DGtal::experimental::ImageContainerByHashTree::Node::Node
Node(Value aValue, HashKey key)
Definition: ImageContainerByHashTree.h:631
DGtal::experimental::ImageContainerByHashTree::getSpanSize
unsigned int getSpanSize() const
Definition: ImageContainerByHashTree.h:391
DGtal::experimental::ImageContainerByHashTree::Node::myData
Value myData
Definition: ImageContainerByHashTree.h:677
Point
MyPointD Point
Definition: testClone2.cpp:383
DGtal::experimental::ImageContainerByHashTree::getNbNodes
unsigned int getNbNodes() const
Value
double Value
Definition: testSimpleRandomAccessRangeFromPoint.cpp:38
DGtal::experimental::ImageContainerByHashTree::Size
Domain::Size Size
Definition: ImageContainerByHashTree.h:147
DGtal::experimental::ImageContainerByHashTree::setValue
void setValue(const HashKey key, const Value object)