public Array decodeVlenData(NcStreamProto.DataCol dproto) throws IOException { DataType dataType = NcStream.convertDataType(dproto.getDataType()); ByteBuffer bb = dproto.getPrimdata().asReadOnlyByteBuffer(); ByteOrder bo = dproto.getBigend() ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN; bb.order(bo); Array alldata = Array.factory(dataType, new int[]{dproto.getNelems()}, bb); // flat array IndexIterator all = alldata.getIndexIterator(); Section section = NcStream.decodeSection(dproto.getSection()); Array[] data = new Array[(int) section.computeSize()]; // divide the primitive data into variable length arrays int count = 0; for (int len : dproto.getVlensList()) { Array primdata = Array.factory(dataType, new int[]{len}); IndexIterator prim = primdata.getIndexIterator(); for (int i=0; i<len; i++) { prim.setObjectNext( all.getObjectNext()); // generic } data[count++] = primdata; } // return Array.makeObjectArray(dataType, data[0].getClass(), section.getShape(), data); return Array.makeVlenArray(section.getShape(), data); }
private Array decodeVlenData(NcStreamProto.DataCol dproto, Section parentSection) throws IOException { DataType dataType = NcStream.convertDataType(dproto.getDataType()); ByteBuffer bb = dproto.getPrimdata().asReadOnlyByteBuffer(); ByteOrder bo = dproto.getBigend() ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
DataType dataType = NcStream.convertDataType(dproto.getDataType()); Section section = (dataType == DataType.SEQUENCE) ? new Section() : NcStream.decodeSection(dproto.getSection()); if (!dproto.getIsVlen()) {
private void decodeMemberData(StructureMembers members, NcStreamProto.DataCol memberData, Section parentSection) throws IOException { String name = memberData.getName(); DataType dataType = NcStream.convertDataType(memberData.getDataType()); Section section = NcStream.decodeSection(memberData.getSection()); if (!memberData.getIsVlen()) { assert memberData.getNelems() == section.computeSize(); } // the dproto section includes parents, remove them Section msection = section.removeFirst(parentSection); if (memberData.getIsVlen()) msection = msection.appendRange(Range.VLEN); StructureMembers.Member result = members.addMember(name, null, null, dataType, msection.getShape()); Array data = decode(memberData, parentSection); result.setDataArray(data); }