Navigation: Up, Table of Contents, Bibliography, Index, Title Page

Definition

A tree traits class gives the range tree and segment tree class the necessary type information of the keys and intervals. Further more, they define function objects that allow to access the keys and intervals, and provide comparison functions that are needed for window queries.

Types

Range_segment_tree_traits_k::Key
The k-dimensional key type.


Range_segment_tree_traits_k::Interval
The k-dimensional interval type.


Range_segment_tree_traits_k::Key_i
The type in dimension i, with 1 i k.


Range_segment_tree_traits_k::key_i
function object providing an operator() that takes an argument of type Key and returns a component of type Key_i.


Range_segment_tree_traits_k::low_i
function object providing an operator() that takes an argument of type Interval and returns a component of type Key_i.


Range_segment_tree_traits_k::high_i
function object providing an operator() that takes an argument of type Interval and returns a component of type Key_i.


Range_segment_tree_traits_k::compare_i
function object providing an operator() that takes two arguments argument a, b of type Key_i and returns true if a<b, false otherwise.

Example

The following piece of code gives an example of how a traits class might look like, if you have keys that are of the type int in the first and that are of the type double in the second dimension.

class Int_double_tree_traits_2{
 public:
  typedef std::pair<int, double> Key;
  typedef int Key_1;
  typedef double Key_2;
  typedef std::pair<Key,Key> Interval;

  class _Key_1{
  public:
    Key_1 operator()(const Key& k)
    { return k.first;}
  };
  class _Key_2{
  public:
    Key_2 operator()(const Key& k)
    { return k.second;}
  };
  class _Low_1{
  public:
    Key_1 operator()(const Interval& i)
    { return i.first.first;}
  };
  class _High_1{
  public:
    Key_1 operator()(const Interval& i)
    { return i.second.first;}
  };
  class _Low_2{
  public:
    Key_2 operator()(const Interval& i)
    { return i.first.second;}
  };
  class _High_2{
  public:
    Key_2 operator()(const Interval& i)
    { return i.second.second;}
  };
  class _Compare_1{
  public:
    bool operator()(Key_1 k1, Key_1 k2)
    { return less<int>()(k1,k2);}
  };
  class _Compare_2{
  public:
    bool operator()(Key_2 k1, Key_2 k2)
    { return less<double>()(k1,k2);}
  };
  typedef _Compare_1 compare_1;
  typedef _Compare_2 compare_2;
  typedef _Low_1 low_1;
  typedef _High_1 high_1;
  typedef _Key_1 key_1;
  typedef _Low_2 low_2;
  typedef _High_2 high_2;
  typedef _Key_2 key_2;
};


Next: Class declaration of Point_traits
Navigation: Up, Table of Contents, Bibliography, Index, Title Page
The GALIA project. Jan 18, 2000.