2 * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org>
6 * Redistribution and use in source and binary forms, with or
7 * without modification, are permitted provided that the following
10 * - Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
13 * - Redistributions in binary form must reproduce the above
14 * copyright notice, this list of conditions and the following
15 * disclaimer in the documentation and/or other materials provided
16 * with the distribution.
18 * - Neither the name of the Git Development Community nor the
19 * names of its contributors may be used to endorse or promote
20 * products derived from this software without specific prior
23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
24 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
25 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
26 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
28 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
30 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
33 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
35 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 package org
.spearce
.jgit
.revwalk
;
40 import java
.util
.AbstractSet
;
41 import java
.util
.ArrayList
;
42 import java
.util
.Collection
;
43 import java
.util
.Iterator
;
44 import java
.util
.List
;
47 * Multiple application level mark bits for {@link RevObject}s.
51 public class RevFlagSet
extends AbstractSet
<RevFlag
> {
54 private final List
<RevFlag
> active
;
56 /** Create an empty set of flags. */
58 active
= new ArrayList
<RevFlag
>();
62 * Create a set of flags, copied from an existing set.
65 * the set to copy flags from.
67 public RevFlagSet(final RevFlagSet s
) {
69 active
= new ArrayList
<RevFlag
>(s
.active
);
73 * Create a set of flags, copied from an existing collection.
76 * the collection to copy flags from.
78 public RevFlagSet(final Collection
<RevFlag
> s
) {
84 public boolean contains(final Object o
) {
85 if (o
instanceof RevFlag
)
86 return (mask
& ((RevFlag
) o
).mask
) != 0;
91 public boolean containsAll(final Collection
<?
> c
) {
92 if (c
instanceof RevFlagSet
) {
93 final int cMask
= ((RevFlagSet
) c
).mask
;
94 return (mask
& cMask
) == cMask
;
96 return super.containsAll(c
);
100 public boolean add(final RevFlag flag
) {
101 if ((mask
& flag
.mask
) != 0)
105 while (p
< active
.size() && active
.get(p
).mask
< flag
.mask
)
112 public boolean remove(final Object o
) {
113 final RevFlag flag
= (RevFlag
) o
;
114 if ((mask
& flag
.mask
) == 0)
117 for (int i
= 0; i
< active
.size(); i
++)
118 if (active
.get(i
).mask
== flag
.mask
)
124 public Iterator
<RevFlag
> iterator() {
125 final Iterator
<RevFlag
> i
= active
.iterator();
126 return new Iterator
<RevFlag
>() {
127 private RevFlag current
;
129 public boolean hasNext() {
133 public RevFlag
next() {
134 return current
= i
.next();
137 public void remove() {
138 mask
&= ~current
.mask
;
146 return active
.size();