Aleph-w  1.5a.2
Biblioteca general de algoritmos y estructuras de datos
 Todo Clases Archivos Funciones Variables 'typedefs' Enumeraciones Amigas Grupos Páginas
tpl_dynarray_set.H
1 
2 # ifndef TPL_DYNARRAY_SET_H
3 # define TPL_DYNARRAY_SET_H
4 
5 # include <tpl_dynArray.H>
6 # include <tpl_sort_utils.H>
7 
28  template <typename T, class Equal = Aleph::equal_to<T>>
29 class DynArray_Set : public DynArray<T>
30 {
31 public:
32 
34  DynArray_Set(const size_t & dim = 0)
35  : DynArray<T>(dim)
36  {
37  // empty
38  }
39 
59  DynArray_Set(size_t pow_dir, size_t pow_seg, size_t pow_block)
60  : DynArray<T>(pow_dir, pow_seg, pow_block)
61  {
62  // empty
63  }
64 
66  T & put(const T & item) { return this->append(item); }
67 
70  T * search(const T & item)
71  {
72  int i =
73  Aleph::sequential_search<T, Equal>(*this, item, 0, this->size() - 1);
74  //Aleph::random_search<T, Equal>(*this, item, 0, this->size() - 1);
75  return (i >= 0 and i < this->size()) ? &this->access(i) : NULL;
76  }
77 
80  void remove(T & item)
81  {
82  std::swap(item, this->access(this->size() - 1));
83  this->cut(this->size() - 1);
84  }
85 
87  void erase(T & item) { remove(item); }
88 
89  class Iterator
90  {
91  DynArray_Set & array;
92  size_t curr;
93 
94  public:
95  Iterator(DynArray_Set & _array)
96  : array(_array), curr(0)
97  {
98  // Empty
99  }
100 
101  bool has_current() const
102  {
103  return curr < array.size();
104  }
105 
106  bool has_curr() const
107  {
108  return has_current();
109  }
110 
111  T & get_current()
112  {
113  if (not has_current())
114  throw std::overflow_error("Iterator is at the end of array");
115 
116  return array(curr);
117  }
118 
119  T & get_curr()
120  {
121  return get_current();
122  }
123 
124  void next()
125  {
126  if (not has_current())
127  throw std::overflow_error("Iterator is at the end of array");
128  ++curr;
129  }
130 
131  void prev()
132  {
133  if (curr == 0)
134  throw std::underflow_error("Iterator is at the begin of array");
135  --curr;
136  }
137 
138  void reset_first()
139  {
140  curr = 0;
141  }
142 
143  void reset_last()
144  {
145  curr = array.size() - 1;
146  }
147  };
148 };
149 
150 # endif // TPL_DYNARRAY_SET_H
151 
Definition: tpl_dynarray_set.H:89
void erase(T &item)
Definition: tpl_dynarray_set.H:87
void cut(const size_t new_dim=0)
Definition: tpl_dynArray.H:1040
size_t size() const
Retorna dimensión actual (más lejano índice escrito)
Definition: tpl_dynArray.H:523
DynArray_Set(const size_t &dim=0)
Constructor por omisión.
Definition: tpl_dynarray_set.H:34
T & put(const T &item)
Inserción de item.
Definition: tpl_dynarray_set.H:66
T & append()
Definition: tpl_dynArray.H:1115
DynArray_Set(size_t pow_dir, size_t pow_seg, size_t pow_block)
Definition: tpl_dynarray_set.H:59
Definition: tpl_dynArray.H:70
T & access(const size_t i)
Definition: tpl_dynArray.H:793
Definition: tpl_dynarray_set.H:29
T * search(const T &item)
Definition: tpl_dynarray_set.H:70

Leandro Rabindranath León