E element = elements.next(); if (element==null) throw new IllegalArgumentException("Unexpected null element in result set"); if (metadataSchema==null) metadataSchema=getter.getMetaSchema(element); D col = getter.getColumn(element); D val = getter.getValue(element); int colSize = dataHandler.getSize(col); assert colSize>0;
for (E element : elements) { num++; dataLength+=dataHandler.getSize(getter.getColumn(element)); dataLength+=dataHandler.getSize(getter.getValue(element)); if (metadataSchema==null) metadataSchema=getter.getMetaSchema(element); dataLength+=getMetaDataSize(metadataSchema,element,getter); D col = getter.getColumn(element); dataHandler.copy(col,data,offset); int valuePos = dataHandler.getSize(col); offset+=valuePos; D val = getter.getValue(element); dataHandler.copy(val,data,offset); offset+=dataHandler.getSize(val);
public static EntryList of(Iterable<Entry> entries) { Preconditions.checkNotNull(entries); int num=0; int dataLength=0; EntryMetaData[] metadataSchema = null; for (Entry entry : entries) { num++; dataLength+=entry.length(); if (metadataSchema==null) metadataSchema=StaticArrayEntry.ENTRY_GETTER.getMetaSchema(entry); dataLength+=getMetaDataSize(metadataSchema,entry,StaticArrayEntry.ENTRY_GETTER); } if (num==0) return EMPTY_LIST; byte[] data = new byte[dataLength]; long[] limitAndValuePos = new long[num]; int pos=0; CopyFactory cpf = new CopyFactory(data); for (Entry entry : entries) { cpf.addMetaData(metadataSchema,entry); entry.as(cpf); limitAndValuePos[pos]= getOffsetAndValue(cpf.dataOffset,entry.getValuePosition()); pos++; } assert cpf.dataOffset==data.length; assert pos==limitAndValuePos.length; return new StaticArrayEntryList(data,limitAndValuePos,metadataSchema); }
private static<D,K> int writeMetaData(byte[] data, int startPos, EntryMetaData[] schema, D entry, StaticArrayEntry.GetColVal<D,K> metaGetter) { if (schema.length==0) return startPos; for (EntryMetaData meta : schema) { Object d = metaGetter.getMetaData(entry,meta); assert d!=null; MetaDataSerializer s = getSerializer(meta); s.write(data,startPos,d); startPos+=s.getByteLength(d); } return startPos; }
private static <E,D> Entry of(E element, StaticArrayEntry.GetColVal<E,D> getter, StaticArrayEntry.DataHandler<D> dataHandler) { StaticArrayEntry entry = of(getter.getColumn(element),getter.getValue(element),dataHandler); //Add meta data if exists if (getter.getMetaSchema(element).length>0) { for (EntryMetaData meta : getter.getMetaSchema(element)) { entry.setMetaData(meta,getter.getMetaData(element,meta)); } } return entry; }
private static<D,K> int getMetaDataSize(EntryMetaData[] schema, D entry, StaticArrayEntry.GetColVal<D,K> metaGetter) { int dataSize = 0; if (schema.length>0) { assert schema.length==metaGetter.getMetaSchema(entry).length; for (EntryMetaData meta : schema) { Object data = metaGetter.getMetaData(entry,meta); assert data!=null; dataSize+=getSerializer(meta).getByteLength(data); } } return dataSize; }