source: trunk/yat/utility/IteratorTraits.h @ 910

Last change on this file since 910 was 910, checked in by Peter, 14 years ago

impl add function for AveragerWeighted?. The function distinguishes between normal iterators and weighted iterators, and call the member add function appropriately. refs #246

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 1.8 KB
Line 
1#ifndef _theplu_yat_utility_iterator_traits_
2#define _theplu_yat_utility_iterator_traits_
3
4// $Id: IteratorTraits.h 910 2007-09-29 00:20:10Z peter $
5
6/*
7  Copyright (C) 2007 Peter Johansson
8
9  This file is part of the yat library, http://trac.thep.lu.se/trac/yat
10
11  The yat library is free software; you can redistribute it and/or
12  modify it under the terms of the GNU General Public License as
13  published by the Free Software Foundation; either version 2 of the
14  License, or (at your option) any later version.
15
16  The yat library is distributed in the hope that it will be useful,
17  but WITHOUT ANY WARRANTY; without even the implied warranty of
18  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19  General Public License for more details.
20
21  You should have received a copy of the GNU General Public License
22  along with this program; if not, write to the Free Software
23  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
24  02111-1307, USA.
25*/
26
27#include "yat/utility/IteratorWeighted.h"
28
29namespace theplu {
30namespace yat {
31namespace utility {
32
33  /*
34    Struct to be used to make compile-time decision that Iterator is
35    unweighted, which is the default.
36   */ 
37  struct unweighted_type {
38    typedef unweighted_type type;
39  };
40   
41  /*
42    Struct to be used to make compile-time decision that Iterator is
43    weighted. Some algorithms come in also in a weighted version in
44    this tag could be used to decide on using them (rather than
45    unweighted cousin).
46   */ 
47  struct weighted_type {
48    typedef weighted_type type;
49  };
50   
51
52  // All iterators should default to unweighted type ...
53  template <class T>
54  struct weighted_iterator_traits {
55    typedef unweighted_type type;
56  };
57
58  // but specialized to return weighted type for some things
59  template <class U, class V>
60  struct weighted_iterator_traits<yat::utility::IteratorWeighted<U,V> > {
61    typedef weighted_type type;
62  };
63
64}}} // of namespace utility, yat, and theplu
65
66#endif
Note: See TracBrowser for help on using the repository browser.