1 /*
2 * Copyright (c) 1998-2002 The Jgroup Team.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU Lesser General Public License version 2 as
6 * published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
16 *
17 */
18
19 package jgroup.util;
20
21
22 /**
23 * The <code> BooleanSet </code> class implements a set through an array
24 * of bits.
25 *
26 * @author Alberto Montresor
27 * @author Salvatore Cammarata
28 * @since Jgroup 1.2
29 */
30 public class BooleanSet
31 {
32
33 /////////////////////////////////////////////////////////////////////////////
34 // Fields
35 /////////////////////////////////////////////////////////////////////////////
36
37 private boolean[] set;
38 private int size;
39
40
41 /////////////////////////////////////////////////////////////////////////////
42 // Constructors
43 /////////////////////////////////////////////////////////////////////////////
44
45 /**
46 * Builds an empty bit set
47 */
48 public BooleanSet(int size)
49 {
50 this.size = 0;
51 set = new boolean[size];
52 }
53
54
55 /////////////////////////////////////////////////////////////////////////////
56 // Methods
57 /////////////////////////////////////////////////////////////////////////////
58
59 /**
60 * Set the i-th element to true
61 */
62 public void set(int index)
63 {
64 if (index >= set.length) {
65 doubleCapacity();
66 }
67 if (!set[index]) {
68 set[index] = true;
69 size++;
70 }
71 }
72
73 /**
74 * Set the i-th element to false
75 */
76 public void unset(int index)
77 {
78 if (index >= set.length) {
79 doubleCapacity();
80 }
81 if (set[index]) {
82 set[index] = false;
83 size--;
84 }
85 }
86
87 /**
88 * Get the i-th element
89 */
90 public boolean lookup(int index)
91 {
92 return set[index];
93 }
94
95 /**
96 * Return the number of elements set to true
97 */
98 public int size()
99 {
100 return size;
101 }
102
103 /**
104 * Return the capacity of the bit set
105 */
106 public int lastIndex()
107 {
108 return set.length;
109 }
110
111 /**
112 * Clear the bit set
113 */
114 public void clear()
115 {
116 for (int i=0; i < set.length; i++)
117 set[i] = false;
118 size = 0;
119 }
120
121 /**
122 * Returns a string representation of this object
123 */
124 public String toString()
125 {
126 StringBuilder ret = new StringBuilder();
127 for(int i=0; i <= set.length; i++)
128 ret.append(set[i] ? "1" : "0");
129 return ret.toString();
130 }
131
132 /////////////////////////////////////////////////////////////////////////////
133 // Private methods
134 /////////////////////////////////////////////////////////////////////////////
135
136 private void doubleCapacity()
137 {
138 // FIXME Write this method
139 throw new UnsupportedOperationException();
140 }
141
142 } // END BooleanSet
143