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 explicit IntTuple(int e1):elements(1,e1) {}
22  inline explicit IntTuple(int e1,int e2) { set(e1,e2); }
23  inline explicit IntTuple(int e1,int e2,int e3) { set(e1,e2,e3); }
24  inline explicit 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 void resize(size_t s,int fillVal) { elements.resize(s,fillVal); }
29  inline int operator[](int i) const { return elements[i]; }
30  inline int& operator[](int i) { return elements[i]; }
31  inline operator BaseT& () { return elements; }
32  inline operator const BaseT& () const { return elements; }
33  inline iterator begin() { return elements.begin(); }
34  inline const_iterator begin() const { return elements.begin(); }
35  inline iterator end() { return elements.end(); }
36  inline const_iterator end() const { return elements.end(); }
37  inline bool operator < (const IntTuple& t) const { return std::lexicographical_compare(begin(),end(),t.begin(),t.end()); }
38  inline bool operator == (const IntTuple& t) const { return elements == t.elements; }
39  inline void fill(int val) { std::fill(elements.begin(),elements.end(),val); }
40  inline void set(int e1) { elements.resize(1); elements[0]=e1; }
41  inline void set(int e1,int e2) { elements.resize(2); elements[0]=e1; elements[1]=e2; }
42  inline void set(int e1,int e2,int e3) { elements.resize(3); elements[0]=e1; elements[1]=e2; elements[2]=e3; }
43  inline int getIndex(int x) const {
44  for(size_t i=0;i<elements.size();i++) if(x==elements[i]) return (int)i;
45  return -1;
46  }
47  inline bool contains(int x,int& index) const {
48  index=getIndex(x);
49  return (index>=0);
50  }
51  inline bool contains(int x) const {
52  int index=getIndex(x);
53  return (index>=0);
54  }
55  inline int count(int x) const {
56  int n=0;
57  for(size_t i=0;i<elements.size();i++) if(x==elements[i]) n++;
58  return n;
59  }
60  inline void operator += (int ofs) { for(size_t i=0;i<elements.size();i++) elements[i]+=ofs; }
61  inline void operator -= (int ofs) { for(size_t i=0;i<elements.size();i++) elements[i]-=ofs; }
62 
63  std::vector<int> elements;
64 };
65 
66 #endif
An integer tuple class.
Definition: IntTuple.h:14