SemOpt  0.2alpha2-SCC
SetArguments.h
1 /*
2  * SetArguments.h
3  *
4  * Created on: 3 Jun 2013
5  * Author: geryo
6  */
7 
8 #ifndef SETARGUMENTS_H_
9 #define SETARGUMENTS_H_
10 
11 #include <map>
12 #include <string>
13 #include <iterator>
14 #include <algorithm>
15 using namespace std;
16 
17 #include "Argument.h"
18 
22 class SetArgumentsIterator : public map<string, Argument *>::const_iterator
23 {
24 public:
25  SetArgumentsIterator() : map<string, Argument *>::const_iterator() {};
26  SetArgumentsIterator(map<string, Argument *>::const_iterator it) : map<string, Argument *>::const_iterator(it) {};
27  Argument ** operator->() {return (Argument ** const)&(map<string, Argument *>::const_iterator::operator->()->second); };
28  Argument* operator*() { return map<string, Argument *>::const_iterator::operator*().second; }
29  SetArgumentsIterator &operator=(const SetArgumentsIterator &param) { map<string, Argument *>::const_iterator::operator = (param); return *this; }
30 };
31 
32 
33 
35 {
36  map<string, Argument *> arguments;
37  map<int, string> key_assoc;
38 public:
39  SetArguments();
40  void add_Argument(Argument *);
41  virtual ~SetArguments();
42  Argument *getArgumentByName(string);
43  Argument *getArgumentByNumber(int num);
44  int cardinality() const;
45  bool empty();
46  SetArgumentsIterator begin() const;
47  SetArgumentsIterator end() const;
48  bool exists(Argument *);
49  bool is_subset_equal(SetArguments *);
50  bool is_subset(SetArguments *);
51  void intersect(SetArguments *, SetArguments *);
52  void setminus(SetArguments *, SetArguments *);
53  void remove(Argument *);
54  void clone(SetArguments *);
55  bool operator==(const SetArguments &other) const;
56 };
57 
58 ostream& operator<<(ostream& , const SetArguments& );
59 
60 #endif /* SETARGUMENTS_H_ */