first version
[dyninst.git] / common / h / vectorSet.h
1 // vectorSet.h
2 // a container class for a set of objects providing just the following operations
3 // (but doing so _very_ efficiently, in space and time)
4 // 1) add an item
5 // 2) remove an arbitrary item from the set and return its contents
6 // 3) peek at individual items in the set by their index (0 thru size-1)
7 // 4) remove an item by its index
8
9 /*
10  * Copyright (c) 1996 Barton P. Miller
11  * 
12  * We provide the Paradyn Parallel Performance Tools (below
13  * described as Paradyn") on an AS IS basis, and do not warrant its
14  * validity or performance.  We reserve the right to update, modify,
15  * or discontinue this software at any time.  We shall have no
16  * obligation to supply such updates or modifications or any other
17  * form of support to you.
18  * 
19  * This license is for research uses.  For such uses, there is no
20  * charge. We define "research use" to mean you may freely use it
21  * inside your organization for whatever purposes you see fit. But you
22  * may not re-distribute Paradyn or parts of Paradyn, in any form
23  * source or binary (including derivatives), electronic or otherwise,
24  * to any other organization or entity without our permission.
25  * 
26  * (for other uses, please contact us at paradyn@cs.wisc.edu)
27  * 
28  * All warranties, including without limitation, any warranty of
29  * merchantability or fitness for a particular purpose, are hereby
30  * excluded.
31  * 
32  * By your use of Paradyn, you understand and agree that we (or any
33  * other person or entity with proprietary rights in Paradyn) are
34  * under no obligation to provide either maintenance services,
35  * update services, notices of latent defects, or correction of
36  * defects for Paradyn.
37  * 
38  * Even if advised of the possibility of such damages, under no
39  * circumstances shall we (or any other person or entity with
40  * proprietary rights in the software licensed hereunder) be liable
41  * to you or any third party for direct, indirect, or consequential
42  * damages of any character regardless of type of action, including,
43  * without limitation, loss of profits, loss of use, loss of good
44  * will, or computer failure or malfunction.  You agree to indemnify
45  * us (and any other person or entity with proprietary rights in the
46  * software licensed hereunder) for any and all liability it may
47  * incur to third parties resulting from your use of Paradyn.
48  */
49
50 #ifndef _VECTOR_SET_H_
51 #define _VECTOR_SET_H_
52
53 #ifdef external_templates
54 #pragma interface
55 #endif
56
57 #include "util/h/Vector.h"
58
59 template <class T>
60 class vectorSet {
61  private:
62    vector<T> data;
63
64  public:
65    vectorSet() {} // empty set
66    vectorSet(const vectorSet &src) : data(src.data) {}
67   ~vectorSet() {}
68
69    vectorSet &operator=(const vectorSet &src) {
70       data = src.data;
71       return *this;
72    }
73
74    bool empty() const {return data.size() == 0;}
75    unsigned size() const {return data.size();}
76
77    const T &operator[](unsigned index) const {
78       return data[index];
79    }
80
81    T removeByIndex(unsigned index);
82    T removeOne() {
83       return removeByIndex(0);
84    }
85
86    vectorSet &operator+=(const T &item) {
87       data += item;
88       return *this;
89    }
90 };
91
92
93 #endif
94