Changeset 2360


Ignore:
Timestamp:
Dec 4, 2010, 2:04:45 AM (13 years ago)
Author:
Peter
Message:

refs #640. adding a functor in SegmentTree? to tranlate a value_type to key_type.

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/test/segment_test.cc

    r2358 r2360  
    214214  avoid_pedantic_warning(x);
    215215  Map::key_type key = Segment<double>(1.0,2.0);
    216   avoid_pedantic_warning(key);
    217216  Map::mapped_type  mapped = "foofana";
    218   avoid_pedantic_warning(mapped);
     217
     218  map.insert(Map::value_type(key, mapped));
     219  suite.add(map.find(1.5) != map.end());
     220  suite.add(map.find(1.5)->second == "foofana");
    219221}
    220222
  • trunk/yat/utility/SegmentMap.h

    r2358 r2360  
    2525#include "Segment.h"
    2626#include "SegmentTree.h"
     27#include "stl_utility.h"
    2728
    2829#include <map>
     
    4344    : public SegmentTree<std::map<Segment<T, Compare>, Tp, 
    4445                                  SegmentCompare<T, Compare> >,
    45                          Compare>
     46                   Compare,
     47                   PairFirst<const std::pair<const Segment<T, Compare>, Tp> > >
    4648  {
    4749  public:
  • trunk/yat/utility/SegmentSet.h

    r2358 r2360  
    2525#include "Segment.h"
    2626#include "SegmentTree.h"
    27 
     27#include "stl_utility.h"
    2828#include "yat_assert.h"
    2929
     
    4646    : public SegmentTree<std::set<Segment<T, Compare>,
    4747                                  SegmentCompare<T, Compare> >,
    48                          Compare>
     48                         Compare,
     49                         Identity<const Segment<T, Compare>&> >
    4950  {
    5051    typedef SegmentSet<T, Compare> me;
  • trunk/yat/utility/SegmentTree.h

    r2358 r2360  
    3636  /**
    3737     \brief Base Class for SegmentSet and SegmentMap
     38
     39     - Container: underlying container (set or map)
     40     - Compare: functor comparing elements (same as in Segment)
     41     - Value2Key: functor translating a \c const_reference to \c
     42       key_type (or \c const&)
    3843   */
    39   template<class Container, class Compare>
     44  template<class Container, class Compare, class Value2Key>
    4045  class SegmentTree
    4146  {
     
    206211  };
    207212
    208   template<class Container, class Compare>
    209   typename SegmentTree<Container, Compare>::size_type
    210   SegmentTree<Container, Compare>::count(const element_type& element) const
     213  template<class Container, class Compare, class Value2Key>
     214  typename SegmentTree<Container, Compare, Value2Key>::size_type
     215  SegmentTree<Container,Compare,Value2Key>::count(const element_type& element) const
    211216  {
    212217    if (find(element)==end())
     
    216221
    217222
    218   template<class Container, class Compare>
    219   typename SegmentTree<Container, Compare>::const_iterator
    220   SegmentTree<Container, Compare>::find(const element_type& vt) const
     223  template<class Container, class Compare, class Value2Key>
     224  typename SegmentTree<Container, Compare, Value2Key>::const_iterator
     225  SegmentTree<Container, Compare, Value2Key>::find(const element_type& vt) const
    221226  {
    222227    const_iterator iter = lower_bound(vt);
    223228    element_compare comp;
    224     if (iter==end() || comp(vt, iter->begin()))
     229    //    if (iter==end() || comp(vt, iter->begin()))
     230    if (iter==end() || comp(vt, Value2Key()(*iter).begin()))
    225231      return end();
    226232    return iter;
     
    228234
    229235
    230   template<typename T, class Compare>
    231   std::pair<typename SegmentTree<T, Compare>::iterator, bool>
    232   SegmentTree<T, Compare>::insert(const value_type& segment)
     236  template<typename T, class Compare, class Value2Key>
     237  std::pair<typename SegmentTree<T, Compare, Value2Key>::iterator, bool>
     238  SegmentTree<T, Compare,Value2Key>::insert(const value_type& segment)
    233239  {
    234240    return container_.insert(segment);
     
    236242
    237243
    238   template<typename T, class Compare>
    239   typename SegmentTree<T, Compare>::iterator
    240   SegmentTree<T, Compare>::lower_bound(const element_type& element)
     244  template<typename T, class Compare, class Value2Key>
     245  typename SegmentTree<T, Compare, Value2Key>::iterator
     246  SegmentTree<T, Compare,Value2Key>::lower_bound(const element_type& element)
    241247  {
    242248    key_type segment(element, element);
    243249    iterator result = container_.lower_bound(segment);
    244250    // result is larger or overlapping with segment (i.e.! result<segment)
    245     YAT_ASSERT(result==end() || !compare(*result,segment));
     251    YAT_ASSERT(result==end()
     252               || !compare(Value2Key()(*result),segment));
    246253    return result;
    247254  }
    248255
    249256
    250   template<typename T, class Compare>
    251   typename SegmentTree<T, Compare>::const_iterator
    252   SegmentTree<T, Compare>::lower_bound(const element_type& element) const
     257  template<typename T, class Compare, class Value2Key>
     258  typename SegmentTree<T, Compare, Value2Key>::const_iterator
     259  SegmentTree<T, Compare,Value2Key>::lower_bound(const element_type& element) const
    253260  {
    254261    key_type segment(element, element);
    255262    const_iterator result = container_.lower_bound(segment);
    256263    // result is larger or overlapping with segment (i.e.! result<segment)
    257     YAT_ASSERT(result==end() || !compare(*result,segment));
     264    YAT_ASSERT(result==end()
     265               || !compare(Value2Key()(*result),segment));
    258266    return result;
    259267  }
    260268
    261269
    262   template<typename T, class Compare>
    263   typename SegmentTree<T, Compare>::iterator
    264   SegmentTree<T, Compare>::upper_bound(const element_type& element)
     270  template<typename T, class Compare, class Value2Key>
     271  typename SegmentTree<T, Compare, Value2Key>::iterator
     272  SegmentTree<T, Compare,Value2Key>::upper_bound(const element_type& element)
    265273  {
    266274    key_type segment(element, element);
     
    276284
    277285
    278   template<typename T, class Compare>
    279   typename SegmentTree<T, Compare>::const_iterator
    280   SegmentTree<T, Compare>::upper_bound(const element_type& element) const
     286  template<typename T, class Compare, class Value2Key>
     287  typename SegmentTree<T, Compare, Value2Key>::const_iterator
     288  SegmentTree<T, Compare,Value2Key>::upper_bound(const element_type& element) const
    281289  {
    282290    Segment<T, Compare> segment(element, element);
Note: See TracChangeset for help on using the changeset viewer.