public AbstractComposite(boolean dynamic, List<?> l) { this.dynamic = dynamic; this.addAll(l); }
@Override public <T> DynamicComposite addComponent(T value, Serializer<T> s, String comparator, ComponentEquality equality) { super.addComponent(value, s, comparator, equality); return this; }
@SuppressWarnings("unchecked") @Override public Object set(int index, Object element) { serialized = null; if (element instanceof Component) { Component prev = components.set(index, (Component<?>) element); if (prev != null) { return prev.getValue(); } return null; } element = mapIfNumber(element); Serializer s = serializerForPosition(index); if (s == null) { s = SerializerTypeInferer.getSerializer(element); } String c = comparatorForPosition(index); if (c == null) { c = comparatorForSerializer(s); } Component prev = components.set(index, new Component(element, null, s, c, ComponentEquality.EQUAL)); if (prev != null) { return prev.getValue(); } return null; }
/** * add(int,Object) is the primary method that adds elements * to the list. All other add methods end up here. */ @Override public void add(int index, Object element) { element = mapIfNumber(element); addComponent(index, element, ComponentEquality.EQUAL); }
public <T> AbstractComposite addComponent(T value, Serializer<T> s) { addComponent(value, s, comparatorForSerializer(s)); return this; }
protected static ByteBuffer getWithShortLength(ByteBuffer bb) { int length = getShortLength(bb); return getBytes(bb, length); }
@SuppressWarnings("unchecked") public void deserialize(ByteBuffer b) { serialized = b.duplicate(); components = new ArrayList<Component<?>>(); String comparator = null; int i = 0; while ((comparator = getComparator(i, b)) != null) { ByteBuffer data = getWithShortLength(b); if (data != null) { Serializer<?> s = getSerializer(i, comparator); ComponentEquality equality = ComponentEquality.fromByte(b.get()); components.add(new Component(null, data.slice(), s, comparator, equality)); } else { throw new RuntimeException("Missing component data in composite type"); } i++; } }
private String getComparator(int i, ByteBuffer bb) { String name = comparatorForPosition(i); if (name != null) { return name; int header = getShortLength(bb); if ((header & 0x8000) == 0) { name = Charsets.UTF_8.newDecoder().decode(getBytes(bb, header).duplicate()).toString(); } else { byte a = (byte) (header & 0xFF);
@SuppressWarnings("unchecked") public <T> AbstractComposite addComponent(int index, T element, ComponentEquality equality) { serialized = null; if (element instanceof Component) { components.add(index, (Component<?>) element); return this; } Serializer s = serializerForPosition(index); if (s == null) { s = SerializerTypeInferer.getSerializer(element); } String c = comparatorForPosition(index); if (c == null) { c = comparatorForSerializer(s); } components.add(index, new Component(element, null, s, c, equality)); setSerializerByPosition(index, s); return this; }
@SuppressWarnings("unchecked") public <T> AbstractComposite addComponent(int index, T element, ComponentEquality equality) { serialized = null; if (element instanceof Component) { components.add(index, (Component<?>) element); return this; } Serializer s = serializerForPosition(index); if (s == null) { s = SerializerTypeInferer.getSerializer(element); } String c = comparatorForPosition(index); if (c == null) { c = comparatorForSerializer(s); } components.add(index, new Component(element, null, s, c, equality)); return this; }
/** * Method is similar to addAll(Collection<? extends Object>) in that * it ends up calling AbstractComposite.add(int,Object). */ @Override public boolean addAll(int i, Collection<? extends Object> c) { return super.addAll(i, flatten(c)); }
public <T> AbstractComposite setComponent(int index, T value, Serializer<T> s) { setComponent(index, value, s, comparatorForSerializer(s)); return this; }
@SuppressWarnings({ "unchecked" }) private static Collection<?> flatten(Collection<?> c) { if (c instanceof AbstractComposite) { return ((AbstractComposite) c).getComponents(); } boolean hasCollection = false; for (Object o : c) { if (o instanceof Collection) { hasCollection = true; break; } } if (!hasCollection) { return c; } List newList = new ArrayList(); for (Object o : c) { if (o instanceof Collection) { newList.addAll(flatten((Collection) o)); } else { newList.add(o); } } return newList; }
Serializer<?> s = serializerForPosition(i); ByteBuffer cb = c.getBytes(s); if (cb == null) { String comparator = comparatorForPosition(i); if (comparator == null) { comparator = c.getComparator();
@SuppressWarnings("unchecked") public void deserialize(ByteBuffer b) { serialized = b.duplicate(); components = new ArrayList<Component<?>>(); String comparator = null; int i = 0; while ((comparator = getComparator(i, b)) != null) { ByteBuffer data = getWithShortLength(b); if (data != null) { Serializer<?> s = getSerializer(i, comparator); ComponentEquality equality = ComponentEquality.fromByte(b.get()); components.add(new Component(null, data.slice(), s, comparator, equality)); } else { throw new RuntimeException("Missing component data in composite type"); } i++; } }
private String getComparator(int i, ByteBuffer bb) { String name = comparatorForPosition(i); if (name != null) { return name; int header = getShortLength(bb); if ((header & 0x8000) == 0) { name = Charsets.UTF_8.newDecoder().decode(getBytes(bb, header).duplicate()).toString(); } else { byte a = (byte) (header & 0xFF);
@SuppressWarnings("unchecked") public <T> AbstractComposite addComponent(int index, T element, ComponentEquality equality) { serialized = null; if (element instanceof Component) { components.add(index, (Component<?>) element); return this; } Serializer s = serializerForPosition(index); if (s == null) { s = SerializerTypeInferer.getSerializer(element); } String c = comparatorForPosition(index); if (c == null) { c = comparatorForSerializer(s); } components.add(index, new Component(element, null, s, c, equality)); setSerializerByPosition(index, s); return this; }
@Override public boolean containsAll(Collection<?> c) { return super.containsAll(flatten(c)); }
/** * add(int,Object) is the primary method that adds elements * to the list. All other add methods end up here. */ @Override public void add(int index, Object element) { element = mapIfNumber(element); addComponent(index, element, ComponentEquality.EQUAL); }
public <T> AbstractComposite addComponent(T value, Serializer<T> s) { addComponent(value, s, comparatorForSerializer(s)); return this; }