22 #ifndef ELM_GENSTRUCT_ASSOCLIST_H_
23 #define ELM_GENSTRUCT_ASSOCLIST_H_
25 #include <elm/PreIterator.h>
26 #include <elm/type_info.h>
27 #include <elm/util/Option.h>
28 #include <elm/compare.h>
29 #include <elm/genstruct/SortedSLList.h>
31 namespace elm {
namespace genstruct {
34 template <
class K,
class T,
class C = Comparator<K>,
class E = Equiv<T>,
class N = type_info<T> >
48 { list_t::Iterator::operator=(iter);
return *
this; }
54 for(Iterator iter(*
this); iter; iter++)
55 if(E::equals(item, iter))
return true;
59 inline operator bool (
void)
const {
return !list.
isEmpty(); }
66 { iter = iterator.iter;
return *
this; }
68 inline bool ended(
void)
const {
return iter.ended(); }
69 inline void next(
void) { iter.next(); }
70 inline T
item(
void)
const {
return iter.item().snd; }
78 inline Iterator
find (
const T& item) {
80 for(; iter; iter++)
if(E::equals(iter, item))
break;
83 inline Iterator
find (
const T& item,
const Iterator &iter) {
84 for(iter++; iter; iter++)
if(E::equals(iter, item))
break;
90 {
typename list_t::Iterator item = list.
find(
pair(key, N::null));
91 if(!item.ended())
return some((*item).snd);
else return none; }
92 T
get(
const K& key,
const T& def)
const
93 {
typename list_t::Iterator item = list.
find(
pair(key, N::null));
94 if(item)
return (*item).snd;
else return def; }
103 { iter = iterator.iter;
return *
this; }
105 inline bool ended(
void)
const {
return iter.ended(); }
106 inline void next(
void) { iter.next(); }
107 inline const K&
item(
void)
const {
return iter.item().fst; }
114 { list.
add(
pair(key, value)); }
115 inline void remove(
const K& key)
117 inline void remove(
const PairIterator& iter)
const T & first(void) const
Definition: AssocList.h:76
int count(void) const
Definition: AssocList.h:52
Definition: PreIterator.h:29
AssocList(const AssocList &alist)
Definition: AssocList.h:41
Iterator find(const T &item) const
Definition: SortedList.h:91
Option< T > some(T val)
Definition: Option.h:49
bool contains(const key_t &item) const
Definition: SortedList.h:48
void put(const K &key, const T &value)
Definition: AssocList.h:113
PairIterator(const AssocList &list)
Definition: AssocList.h:45
Iterator find(const T &item, const Iterator &iter)
Definition: AssocList.h:83
PairIterator(const PairIterator &iter)
Definition: AssocList.h:46
Pair< T1, T2 > pair(const T1 &v1, const T2 &v2)
Definition: Pair.h:41
void remove(const T &item)
Definition: SortedList.h:83
bool hasKey(const K &key) const
Definition: AssocList.h:95
void next(void)
Definition: AssocList.h:106
Definition: AssocList.h:98
bool isEmpty(void) const
Definition: SortedList.h:56
Iterator(const AssocList &list)
Definition: AssocList.h:63
void add(const T &value)
Definition: SortedList.h:72
Definition: AssocList.h:61
const T & last(void) const
Definition: SortedList.h:90
Iterator & operator=(const Iterator &iterator)
Definition: AssocList.h:65
Definition: AssocList.h:35
value_t value(CString name, int value)
Definition: rtti.h:40
KeyIterator & operator=(const KeyIterator &iterator)
Definition: AssocList.h:102
const T & last(void) const
Definition: AssocList.h:77
Definition: SortedSLList.h:31
Iterator find(const T &item)
Definition: AssocList.h:78
PairIterator & operator=(const PairIterator &iter)
Definition: AssocList.h:47
bool isEmpty(void) const
Definition: AssocList.h:58
const K & item(void) const
Definition: AssocList.h:107
const T & first(void) const
Definition: SortedList.h:89
Definition: AssocList.h:43
bool contains(const T &item) const
Definition: AssocList.h:53
Iterator(const Iterator &iterator)
Definition: AssocList.h:64
KeyIterator(const AssocList &list)
Definition: AssocList.h:100
KeyIterator(const KeyIterator &iterator)
Definition: AssocList.h:101
void next(void)
Definition: AssocList.h:69
bool ended(void) const
Definition: AssocList.h:68
T2 snd
Definition: Pair.h:19
bool ended(void) const
Definition: AssocList.h:105
AssocList(void)
Definition: AssocList.h:40
int count(void) const
Definition: SortedList.h:46
T item(void) const
Definition: AssocList.h:70
const OptionalNone none
Definition: util_Option.cpp:134