private void purgeNoPool() { for (int id = idBits.nextSetBit(0); id >= 0; id = idBits.nextSetBit(id + 1)) { components.unsafeSet(id, null); } } }
public BitVector(BitVector source) { this(); for (int id = source.nextSetBit(0); id != -1; id = source.nextSetBit(id + 1)) { set(id); } }
private void purgeNoPool() { for (int id = idBits.nextSetBit(0); id >= 0; id = idBits.nextSetBit(id + 1)) { components.unsafeSet(id, null); } } }
@Override public String toString() { // possibly faster if done in JavaScript and all numerical properties // are // put into an array and sorted int length = length(); if (length == 0) { // a "length" of 0 means there are no bits set to true return "{}"; } StringBuilder sb = new StringBuilder("{"); // at this point, there is at least one true bit, nextSetBit can not // fail int next = nextSetBit(0); sb.append(next); // loop until nextSetBit returns -1 while ((next = nextSetBit(next + 1)) != -1) { sb.append(", "); sb.append(next); } sb.append("}"); return sb.toString(); }
@Override public String toString() { int cardinality = cardinality(); int end = Math.min(128, cardinality); int count = 0; StringBuilder sb = new StringBuilder(); sb.append("BitVector[").append(cardinality); if (cardinality > 0) { sb.append(": {"); for (int i = nextSetBit(0); end > count && i != -1; i = nextSetBit(i + 1)) { if (count != 0) sb.append(", "); sb.append(i); count++; } if (cardinality > end) sb.append(" ..."); sb.append("}"); } sb.append("]"); return sb.toString(); } }
private void purgeWithPool() { for (int id = idBits.nextSetBit(0); id >= 0; id = idBits.nextSetBit(id + 1)) { A c = components.get(id); pool.free((PooledComponent) c); components.unsafeSet(id, null); } }
private void purgeWithPool() { for (int id = idBits.nextSetBit(0); id >= 0; id = idBits.nextSetBit(id + 1)) { A c = components.get(id); pool.free((PooledComponent) c); components.unsafeSet(id, null); } }
protected void extractComponents(SaveFileFormat save) { ComponentManager cm = world.getComponentManager(); Map<Class<? extends Component>, String> lookup = save.componentIdentifiers.typeToName; Set<String> names = new HashSet<String>(); BitVector bs = componentIds; SaveFileFormat.ComponentIdentifiers identifiers = save.componentIdentifiers; for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i + 1)) { Class<? extends Component> type = cm.typeFactory.getTypeFor(i).getType(); lookup.put(type, resolveNameId(names, type)); if (identifiers.typeToId.get(type) == null) { identifiers.typeToId.put(type, lookup.size()); identifiers.idToType.put(lookup.size(), type); } } }
protected void extractComponents(SaveFileFormat save) { ComponentManager cm = world.getComponentManager(); Map<Class<? extends Component>, String> lookup = save.componentIdentifiers.typeToName; Set<String> names = new HashSet<String>(); BitVector bs = componentIds; SaveFileFormat.ComponentIdentifiers identifiers = save.componentIdentifiers; for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i + 1)) { Class<? extends Component> type = cm.typeFactory.getTypeFor(i).getType(); lookup.put(type, resolveNameId(names, type)); if (identifiers.typeToId.get(type) == null) { identifiers.typeToId.put(type, lookup.size()); identifiers.idToType.put(lookup.size(), type); } } }
/** * Decodes the set bits as integers. The destination * {@link IntBag} is reset before the bits are transposed. * * @param out decoded ints end up here * @return Same as out */ public IntBag toIntBag(IntBag out) { out.setSize(0); if (isEmpty()) return out; for (int id = nextSetBit(0); id >= 0; id = nextSetBit(id + 1)) { out.add(id); } return out; }
void preWrite(SaveFileFormat save) { entityIds.clear(); ConverterUtil.toBitVector(save.entities, entityIds); boolean foundNew = true; BitVector bs = entityIds; while (foundNew) { foundNew = false; for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i + 1)) { for (Field f : referencingFields) { foundNew |= findReferences(i, f, bs); } } } entityIds.toIntBag(save.entities); }
void preWrite(SaveFileFormat save) { entityIds.clear(); ConverterUtil.toBitVector(save.entities, entityIds); boolean foundNew = true; BitVector bs = entityIds; while (foundNew) { foundNew = false; for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i + 1)) { for (Field f : referencingFields) { foundNew |= findReferences(i, f, bs); } } } entityIds.toIntBag(save.entities); }
private Bag<ComponentMapper> getAdditions(BitVector origin) { ComponentTypeFactory tf = cm.typeFactory; Bag<ComponentMapper> types = new Bag(ComponentMapper.class); for (int i = additions.nextSetBit(0); i >= 0; i = additions.nextSetBit(i + 1)) { if (!origin.get(i)) types.add(cm.getMapper(tf.getTypeFor(i).getType())); } return types; }
private Bag<ComponentMapper> getRemovals(BitVector origin) { ComponentTypeFactory tf = cm.typeFactory; Bag<ComponentMapper> types = new Bag(ComponentMapper.class); for (int i = removals.nextSetBit(0); i >= 0; i = removals.nextSetBit(i + 1)) { if (origin.get(i)) types.add(cm.getMapper(tf.getTypeFor(i).getType())); } return types; } }
private Bag<ComponentMapper> getAdditions(BitVector origin) { ComponentTypeFactory tf = cm.typeFactory; Bag<ComponentMapper> types = new Bag(ComponentMapper.class); for (int i = additions.nextSetBit(0); i >= 0; i = additions.nextSetBit(i + 1)) { if (!origin.get(i)) types.add(cm.getMapper(tf.getTypeFor(i).getType())); } return types; }
private Bag<ComponentMapper> getRemovals(BitVector origin) { ComponentTypeFactory tf = cm.typeFactory; Bag<ComponentMapper> types = new Bag(ComponentMapper.class); for (int i = removals.nextSetBit(0); i >= 0; i = removals.nextSetBit(i + 1)) { if (origin.get(i)) types.add(cm.getMapper(tf.getTypeFor(i).getType())); } return types; } }
/** * Decodes the set bits as pairs of <code>entity id</code> and * {@link World#compositionId(int) compositionId}. The * destination{@link IntBag} is reset before the bits are * transposed. * * @param out decoded ints end up here * @return Same as out */ public IntBag toIntBagIdCid(ComponentManager cm, IntBag out) { out.setSize(0); if (isEmpty()) return out; for (int id = nextSetBit(0); id >= 0; id = nextSetBit(id + 1)) { out.add(id); out.add(cm.getIdentity(id)); } return out; }
int allocateIdentity(BitVector componentBits, ComponentManager cm) { Bag<ComponentMapper> mappers = new Bag<ComponentMapper>(ComponentMapper.class, componentBits.cardinality()); ComponentTypeFactory tf = cm.getTypeFactory(); for (int i = componentBits.nextSetBit(0); i >= 0; i = componentBits.nextSetBit(i + 1)) { mappers.add(cm.getMapper(tf.getTypeFor(i).getType())); } compositionMappers.add(mappers); compositionBits.add(new BitVector(componentBits)); return compositionBits.size() - 1; } }
int allocateIdentity(BitVector componentBits, ComponentManager cm) { Bag<ComponentMapper> mappers = new Bag<ComponentMapper>(ComponentMapper.class, componentBits.cardinality()); ComponentTypeFactory tf = cm.getTypeFactory(); for (int i = componentBits.nextSetBit(0); i >= 0; i = componentBits.nextSetBit(i + 1)) { mappers.add(cm.getMapper(tf.getTypeFor(i).getType())); } compositionMappers.add(mappers); compositionBits.add(new BitVector(componentBits)); return compositionBits.size() - 1; } }
int allocateIdentity(BitVector componentBits, ComponentManager cm) { Bag<ComponentMapper> mappers = new Bag<ComponentMapper>(ComponentMapper.class, componentBits.cardinality()); ComponentTypeFactory tf = cm.getTypeFactory(); for (int i = componentBits.nextSetBit(0); i >= 0; i = componentBits.nextSetBit(i + 1)) { mappers.add(cm.getMapper(tf.getTypeFor(i).getType())); } compositionMappers.add(mappers); compositionBits.add(new BitVector(componentBits)); return compositionBits.size() - 1; } }