Elm  1.0
ELM is a library providing generic data structures, OS-independent interface, plugins and XML.
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
FixArray.h
1 /*
2  * $Id$
3  * FixArray class interface
4  *
5  * This file is part of OTAWA
6  * Copyright (c) 2008, IRIT UPS.
7  *
8  * OTAWA is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * OTAWA is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with OTAWA; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22 #ifndef ELM_GENSTRUCT_FIXARRAY_H_
23 #define ELM_GENSTRUCT_FIXARRAY_H_
24 
25 #include <elm/util/Equiv.h>
26 #include <elm/array.h>
27 
28 template <class T, int S, class E = Equiv<T> >
29 class FixArray {
30 public:
31 
32  inline FixArray(void) { }
33  inline FixArray(const FixArray& array) { }
34 
35  // Iterator class
36  class Iterator: public PreIterator<Iterator, const T&> {
37  public:
38  inline Iterator(const FixArray<T, S, E>& array): a(&array), i(0) { }
39  inline Iterator(const Iterator& it): a(it.a), i(it.i) { }
40  inline Iterator& operator=(const Iterator& it) { a = it.a; i = it.i; return *this; }
41 
42  inline bool ended(void) const { return i >= S; }
43  inline const T& item(void) const { return a->get(i); }
44  inline void next(void) { i++; }
45 
46  private:
47  const FixArray<T, S, E> *a;
48  int i;
49  };
50 
51  // Array concept
52  inline int length(void) { return S; }
53  inline const T& get(int i) const { ASSERT(i < S); return t[i]; }
54  inline const T& operator[](int i) const { return get(i); }
55  inline int indexOf(const T& v, int i = 0) const
56  { for(; i < S; i++) if(E::equals(t[i], v)) return i; return -1; }
57  inline int lastIndexOf(const T& v, int i = S) const
58  { for(i--; i >= 0; i--) if(E::equals(t[i], v)) return i; return -1; }
59 
60  // Mutable array concept
61  inline void set(int i, const T& v) { ASSERT(i < S); t[i] = v; }
62  inline void set(const Iterator& i, const T& v) { set(i.i, v); }
63  inline T& get(int i) { ASSERT(i < S); return t[i]; }
64  inline T& operator[](int i) { return get(i); }
65  inline void insert(int i, const T& v)
66  { ASSERT(i < S); Array::copy(t + i + 1, t + i, S - i - 1); t[i] = v; }
67  inline void insert(const Iterator& i, const T& v) { insert(i.i, v); }
68  inline void removeAt(int i)
69  { ASSERT(i < S); Array::copy(t + i, t + i + 1, S - i - 1); }
70  inline void removeAt(const Iterator& i) { removeAt(i.i); }
71 
72  // Collection concept
73  inline int count(void) const { return S; }
74  inline bool contains(const T& v) const { return indexOf(v) >= 0; }
75  inline bool isEmpty(void) const { return false; }
76  inline operator bool(void) const { return true; }
77  template<template< class _> class C> bool containsAll(const C<T> &collection) {
78  for(typename C<T>::Iterator it(collection); it; it++)
79  if(!contains(it))
80  return false;
81  return true;
82  }
83 
84 private:
85  T t[S];
86 };
87 
88 #endif /* FIXARRAY_H_ */
void removeAt(int i)
Definition: FixArray.h:68
Definition: FixArray.h:29
void copy(T *target, const T *source, int size)
Definition: array.h:59
void removeAt(const Iterator &i)
Definition: FixArray.h:70
const T & item(void) const
Definition: FixArray.h:43
bool isEmpty(void) const
Definition: FixArray.h:75
Iterator(const FixArray< T, S, E > &array)
Definition: FixArray.h:38
int lastIndexOf(const T &v, int i=S) const
Definition: FixArray.h:57
void next(void)
Definition: FixArray.h:44
FixArray(const FixArray &array)
Definition: FixArray.h:33
FixArray(void)
Definition: FixArray.h:32
int count(void) const
Definition: FixArray.h:73
bool ended(void) const
Definition: FixArray.h:42
void insert(int i, const T &v)
Definition: FixArray.h:65
int indexOf(const T &v, int i=0) const
Definition: FixArray.h:55
bool containsAll(const C< T > &collection)
Definition: FixArray.h:77
Definition: FixArray.h:36
bool contains(const T &v) const
Definition: FixArray.h:74
const T & operator[](int i) const
Definition: FixArray.h:54
Iterator & operator=(const Iterator &it)
Definition: FixArray.h:40
void set(const Iterator &i, const T &v)
Definition: FixArray.h:62
int length(void)
Definition: FixArray.h:52
Iterator(const Iterator &it)
Definition: FixArray.h:39
void set(int i, const T &v)
Definition: FixArray.h:61
T & operator[](int i)
Definition: FixArray.h:64
void insert(const Iterator &i, const T &v)
Definition: FixArray.h:67