source: src/Patterns/ObservedContainer.hpp@ 70672e3

Last change on this file since 70672e3 was 70672e3, checked in by Frederik Heber <heber@…>, 15 years ago

Added config.h to all header files.

  • Property mode set to 100644
File size: 2.9 KB
Line 
1/*
2 * AtomSet.hpp
3 *
4 * Created on: Jul 8, 2010
5 * Author: crueger
6 */
7
8#ifndef OBSERVEDCONTAINER_HPP_
9#define OBSERVEDCONTAINER_HPP_
10
11// include config.h
12#ifdef HAVE_CONFIG_H
13#include <config.h>
14#endif
15
16#include "types.hpp"
17
18#include <utility>
19#include "ObservedIterator.hpp"
20#include "Descriptors/SelectiveIterator.hpp"
21
22class World;
23class atom;
24class AtomDescriptor;
25
26/**
27 * Forward to std::map<atomId_t,atom*> that allows production of observed and
28 * unobserved iterators to all atoms.
29 *
30 * Imported via typedef into class World. Defined here to avoid bloating of the
31 * World class
32 */
33template <class Container>
34class ObservedContainer
35{
36 friend class World;
37
38public:
39 typedef Container set_t;
40 // this iterator can be used for internal purposes...
41 // no lock used here
42 typedef typename set_t::iterator internal_iterator;
43 typedef typename std::reverse_iterator<internal_iterator> reverse_internal_iterator;
44
45 // typedefs for iterator structure
46 typedef ObservedIterator<set_t> iterator;
47 typedef typename set_t::const_iterator const_iterator;
48 typedef std::reverse_iterator<iterator> reverse_iterator;
49 typedef typename std::reverse_iterator<const_iterator> const_reverse_iterator;
50
51 // some more typedefs for STL-Structure
52 typedef typename set_t::key_type key_type;
53 typedef typename set_t::mapped_type mapped_type;
54 typedef typename set_t::value_type value_type;
55 typedef typename set_t::key_compare key_compare;
56 typedef typename set_t::allocator_type allocator_type;
57
58 ObservedContainer(Observable*);
59 ObservedContainer(const ObservedContainer&);
60 virtual ~ObservedContainer();
61
62 // all the functions from STL-map (forwards to content)
63 ObservedContainer& operator=(const ObservedContainer&);
64
65 iterator begin();
66 const_iterator begin() const;
67 iterator end();
68 const_iterator end() const;
69 reverse_iterator rbegin();
70 const_reverse_iterator rbegin() const;
71 reverse_iterator rend();
72 const_reverse_iterator rend() const;
73
74 bool empty() const;
75 size_t size() const;
76 size_t max_size() const;
77
78 mapped_type &operator[](const key_type&);
79
80 std::pair<iterator,bool> insert (const value_type&);
81
82 size_t erase ( const key_type& x );
83 void clear();
84
85 iterator find ( const key_type& x );
86 const_iterator find ( const key_type& x ) const;
87
88 size_t count ( const key_type& x ) const;
89 internal_iterator begin_internal();
90 internal_iterator end_internal();
91 reverse_internal_iterator rbegin_internal();
92 reverse_internal_iterator rend_internal();
93
94 set_t &getContent();
95private:
96 set_t content;
97 Observable *obs;
98};
99
100#endif /* OBSERVEDCONTAINER_HPP_ */
Note: See TracBrowser for help on using the repository browser.