1
2
3
4
5
6
7
8
9
10
11 package org.eclipse.jgit.revwalk;
12
13 import java.util.AbstractSet;
14 import java.util.ArrayList;
15 import java.util.Collection;
16 import java.util.Iterator;
17 import java.util.List;
18
19
20
21
22
23
24
25 public class RevFlagSet extends AbstractSet<RevFlag> {
26 int mask;
27
28 private final List<RevFlag> active;
29
30
31
32
33 public RevFlagSet() {
34 active = new ArrayList<>();
35 }
36
37
38
39
40
41
42
43 public RevFlagSethref="../../../../org/eclipse/jgit/revwalk/RevFlagSet.html#RevFlagSet">RevFlagSet(RevFlagSet s) {
44 mask = s.mask;
45 active = new ArrayList<>(s.active);
46 }
47
48
49
50
51
52
53
54 public RevFlagSet(Collection<RevFlag> s) {
55 this();
56 addAll(s);
57 }
58
59
60 @Override
61 public boolean contains(Object o) {
62 if (o instanceof RevFlag)
63 return (mask & ((RevFlag) o).mask) != 0;
64 return false;
65 }
66
67
68 @Override
69 public boolean containsAll(Collection<?> c) {
70 if (c instanceof RevFlagSet) {
71 final int cMask = ((RevFlagSet) c).mask;
72 return (mask & cMask) == cMask;
73 }
74 return super.containsAll(c);
75 }
76
77
78 @Override
79 public boolean add(RevFlag flag) {
80 if ((mask & flag.mask) != 0)
81 return false;
82 mask |= flag.mask;
83 int p = 0;
84 while (p < active.size() && active.get(p).mask < flag.mask)
85 p++;
86 active.add(p, flag);
87 return true;
88 }
89
90
91 @Override
92 public boolean remove(Object o) {
93 final RevFlag"../../../../org/eclipse/jgit/revwalk/RevFlag.html#RevFlag">RevFlag flag = (RevFlag) o;
94 if ((mask & flag.mask) == 0)
95 return false;
96 mask &= ~flag.mask;
97 for (int i = 0; i < active.size(); i++)
98 if (active.get(i).mask == flag.mask)
99 active.remove(i);
100 return true;
101 }
102
103
104 @Override
105 public Iterator<RevFlag> iterator() {
106 final Iterator<RevFlag> i = active.iterator();
107 return new Iterator<RevFlag>() {
108 private RevFlag current;
109
110 @Override
111 public boolean hasNext() {
112 return i.hasNext();
113 }
114
115 @Override
116 public RevFlag next() {
117 return current = i.next();
118 }
119
120 @Override
121 public void remove() {
122 mask &= ~current.mask;
123 i.remove();
124 }
125 };
126 }
127
128
129 @Override
130 public int size() {
131 return active.size();
132 }
133 }