KrisLibrary  1.0.0
IntTuple.h
1 #ifndef INT_TUPLE_H
2 #define INT_TUPLE_H
3 
4 //#include <iostream>
5 #include <vector>
6 #include <stdlib.h>
7 
14 struct IntTuple
15 {
16  typedef std::vector<int> BaseT;
17  typedef std::vector<int>::const_iterator const_iterator;
18  typedef std::vector<int>::iterator iterator;
19 
20  inline IntTuple() {}
21  inline IntTuple(int e1):elements(1,e1) {}
22  inline IntTuple(int e1,int e2) { set(e1,e2); }
23  inline IntTuple(int e1,int e2,int e3) { set(e1,e2,e3); }
24  inline IntTuple(const std::vector<int>& t):elements(t) {}
25  inline size_t size() const { return elements.size(); }
26  inline bool empty() const { return elements.empty(); }
27  inline void resize(size_t s) { elements.resize(s); }
28  inline int operator[](int i) const { return elements[i]; }
29  inline int& operator[](int i) { return elements[i]; }
30  inline operator BaseT& () { return elements; }
31  inline operator const BaseT& () const { return elements; }
32  inline iterator begin() { return elements.begin(); }
33  inline const_iterator begin() const { return elements.begin(); }
34  inline iterator end() { return elements.end(); }
35  inline const_iterator end() const { return elements.end(); }
36  inline bool operator < (const IntTuple& t) const { return std::lexicographical_compare(begin(),end(),t.begin(),t.end()); }
37  inline bool operator == (const IntTuple& t) const { return elements == t.elements; }
38  inline void fill(int val) { std::fill(elements.begin(),elements.end(),val); }
39  inline void set(int e1) { elements.resize(1); elements[0]=e1; }
40  inline void set(int e1,int e2) { elements.resize(2); elements[0]=e1; elements[1]=e2; }
41  inline void set(int e1,int e2,int e3) { elements.resize(3); elements[0]=e1; elements[1]=e2; elements[2]=e3; }
42  inline int getIndex(int x) const {
43  for(size_t i=0;i<elements.size();i++) if(x==elements[i]) return (int)i;
44  return -1;
45  }
46  inline bool contains(int x,int& index) const {
47  index=getIndex(x);
48  return (index>=0);
49  }
50  inline bool contains(int x) const {
51  int index=getIndex(x);
52  return (index>=0);
53  }
54  inline int count(int x) const {
55  int n=0;
56  for(size_t i=0;i<elements.size();i++) if(x==elements[i]) n++;
57  return n;
58  }
59  inline void operator += (int ofs) { for(size_t i=0;i<elements.size();i++) elements[i]+=ofs; }
60  inline void operator -= (int ofs) { for(size_t i=0;i<elements.size();i++) elements[i]-=ofs; }
61 
62  std::vector<int> elements;
63 };
64 
65 #endif
An integer tuple class.
Definition: IntTuple.h:14