Scopira  20080306
islice.h
1 
2 /*
3  * Copyright (c) 2002 National Research Council
4  *
5  * All rights reserved.
6  *
7  * This material is confidential and proprietary information of
8  * National Research Council Canada ("Confidential Information").
9  * This Confidential Information may only be used and reproduced
10  * in accordance with the terms of the license agreement.
11  *
12  */
13 
14 #ifndef __INCLUDED_SCOPIRA_BASEKIT_ISLICE_H__
15 #define __INCLUDED_SCOPIRA_BASEKIT_ISLICE_H__
16 
17 #include <scopira/tool/array.h>
18 
19 namespace scopira
20 {
21  namespace basekit
22  {
23  template <class T> class islice_vec_iterator_g;
24  template <class T> class const_islice_vec_iterator_g;
25  template <class T> class islice_vec_g;
26  }
27 }
28 
33 template <class T> class scopira::basekit::islice_vec_iterator_g
34 {
35  public:
37  typedef T data_type;
38  private:
39  T * const * dm_ptr;
40  public:
42  islice_vec_iterator_g(T * const * ptr) : dm_ptr(ptr) { }
44  const T & operator *(void) const { return **dm_ptr; }
46  bool operator ==(const islice_vec_iterator_g<T> &rhs) const { return dm_ptr == rhs.dm_ptr; }
48  bool operator !=(const islice_vec_iterator_g<T> &rhs) const { return dm_ptr != rhs.dm_ptr; }
49 
51  islice_vec_iterator_g<T>& operator++(void) { dm_ptr++; return *this; }
52 };
53 
58 template <class T> class scopira::basekit::const_islice_vec_iterator_g
59 {
60  public:
62  typedef T data_type;
63  private:
64  const T * const * dm_ptr;
65  public:
67  const_islice_vec_iterator_g(const T * const * ptr) : dm_ptr(ptr) { }
69  const T & operator *(void) const { return **dm_ptr; }
71  bool operator ==(const const_islice_vec_iterator_g<T> &rhs) const { return dm_ptr == rhs.dm_ptr; }
73  bool operator !=(const const_islice_vec_iterator_g<T> &rhs) const { return dm_ptr != rhs.dm_ptr; }
74 
76  const_islice_vec_iterator_g<T>& operator++(void) { dm_ptr++; return *this; }
77 };
78 
84 template <class T> class scopira::basekit::islice_vec_g : private scopira::tool::basic_array<T*>
85 {
86  private:
87  typedef scopira::tool::basic_array<T*> parent_type;
88  public:
90  typedef T data_type;
95 
96  public:
97  // default default ctor - ok
98 
100  explicit islice_vec_g(size_t len) : parent_type(len) { }
101 
103  size_t size(void) const { return parent_type::size(); }
105  bool empty(void) const { return parent_type::empty(); }
107  void resize(size_t len) { parent_type::resize(len); }
109  void clear(void) { parent_type::clear(); }
110 
112  iterator begin(void) { return islice_vec_iterator_g<T>(dm_ary); }
114  iterator end(void) { return islice_vec_iterator_g<T>(dm_ary+dm_len); }
116  const_iterator begin(void) const { return const_islice_vec_iterator_g<T>(dm_ary); }
118  const_iterator end(void) const { return const_islice_vec_iterator_g<T>(dm_ary+dm_len); }
119 
121  template <class L>
122  void copy(const L & rhs);
123 
125  void set_ptr(size_t idx, T * ref) { parent_type::set(idx, ref); }
126 
128  T &operator[](size_t idx) { return *parent_type::get(idx); }
130  const T &operator[](size_t idx) const { return *parent_type::get(idx); }
132  T & get(size_t idx) { return *parent_type::get(idx); }
134  const T & get(size_t idx) const { return *parent_type::get(idx); }
136  void set(size_t idx, const T &val) { *parent_type::get(idx) = val; }
137 };
138 template <class T> template <class L>
140 {
141  typename L::const_iterator ii;
142  size_t i;
143  resize( rhs.size() );
144  for (i=0, ii=rhs.begin(); ii != rhs.end(); ++i, ++ii)
145  set(i, *ii);
146 }
147 
148 #endif
149 
bool operator!=(const islice_vec_iterator_g< T > &rhs) const
inequality operator
Definition: islice.h:48
void clear(void)
clear
Definition: islice.h:109
void copy(const L &rhs)
generic copy, uses size() and iterators
Definition: islice.h:139
const T & operator*(void) const
dereference accessor
Definition: islice.h:44
iterator begin(void)
begin-stl like iterator
Definition: islice.h:112
T data_type
the generic data type T
Definition: islice.h:90
void set_ptr(size_t idx, T *ref)
sets the address
Definition: islice.h:125
Definition: archiveflow.h:20
islice_vec_g(size_t len)
size initing ctor
Definition: islice.h:100
const_islice_vec_iterator_g< T > & operator++(void)
increment operator
Definition: islice.h:76
Definition: array.h:30
const T & operator[](size_t idx) const
access
Definition: islice.h:130
iterator end(void)
end-stl like iterator
Definition: islice.h:114
void resize(size_t len)
resizer
Definition: islice.h:107
const_iterator begin(void) const
begin-stl like iterator
Definition: islice.h:116
const_islice_vec_iterator_g(const T *const *ptr)
ctor
Definition: islice.h:67
T data_type
the generic data type T
Definition: islice.h:37
islice_vec_iterator_g(T *const *ptr)
ctor
Definition: islice.h:42
bool operator==(const islice_vec_iterator_g< T > &rhs) const
equality operator
Definition: islice.h:46
Definition: islice.h:25
const_islice_vec_iterator_g< T > const_iterator
the const_interator type
Definition: islice.h:94
islice_vec_iterator_g< T > & operator++(void)
increment operator
Definition: islice.h:51
islice_vec_iterator_g< T > iterator
the interator type
Definition: islice.h:92
size_t size(void) const
size
Definition: islice.h:103
T data_type
the generic data type T
Definition: islice.h:62
const_iterator end(void) const
end-stl like iterator
Definition: islice.h:118
bool empty(void) const
empty?
Definition: islice.h:105
T & operator[](size_t idx)
access
Definition: islice.h:128