Adds an externally-created Relation instance. @param rel the Relation to be added. @return true if the Relation was added to the set, false otherwise
(Relation rel)
| 209 | * @return true if the {@link Relation} was added to the set, false otherwise |
| 210 | */ |
| 211 | @Override |
| 212 | public boolean add(Relation rel) { |
| 213 | |
| 214 | // keep a track of the max ID we now of to support the index access |
| 215 | maxID = Math.max(maxID, rel.getId()); |
| 216 | |
| 217 | /** index by ID **/ |
| 218 | indexById.put(rel.getId(), rel); |
| 219 | |
| 220 | /** index by type **/ |
| 221 | BitSet sameType = indexByType.get(rel.getType()); |
| 222 | if(sameType == null) { |
| 223 | sameType = new BitSet(rel.getId()); |
| 224 | indexByType.put(rel.getType(), sameType); |
| 225 | } |
| 226 | sameType.set(rel.getId()); |
| 227 | |
| 228 | /** index by member **/ |
| 229 | // widen the index by member list, if needed |
| 230 | for(int i = indexesByMember.size(); i < rel.getMembers().length; i++) { |
| 231 | indexesByMember.add(new HashMap<Integer, BitSet>()); |
| 232 | } |
| 233 | |
| 234 | for(int memeberPos = 0; memeberPos < rel.getMembers().length; memeberPos++) { |
| 235 | int member = rel.getMembers()[memeberPos]; |
| 236 | Map<Integer, BitSet> indexByMember = indexesByMember.get(memeberPos); |
| 237 | BitSet sameMember = indexByMember.get(member); |
| 238 | if(sameMember == null) { |
| 239 | sameMember = new BitSet(maxID); |
| 240 | indexByMember.put(member, sameMember); |
| 241 | } |
| 242 | sameMember.set(rel.getId()); |
| 243 | } |
| 244 | |
| 245 | // notify anyone who cares that a new relation has been added |
| 246 | fireRelationAdded(new RelationSetEvent(this, |
| 247 | RelationSetEvent.RELATION_ADDED, rel)); |
| 248 | |
| 249 | return true; |
| 250 | } |
| 251 | |
| 252 | /** |
| 253 | * Returns the maximum arity for any relation in this |
no test coverage detected