private void convertHeap(ArrayStructureBB asbb, int pos, StructureMembers sm) throws IOException { ByteBuffer bb = asbb.getByteBuffer(); for (StructureMembers.Member m : sm.getMembers()) { if (m.getDataType() == DataType.STRING) { int size = m.getSize(); int destPos = pos + m.getDataParam(); String[] result = new String[size]; for (int i = 0; i < size; i++) { } else if (m.isVariableLength()) { int startPos = pos + m.getDataParam(); int[] fieldshape = m.getShape(); int prefixrank = 0; int size = 1; size *= fieldshape[prefixrank]; assert size == m.getSize() : "Internal error: field size mismatch"; Array[] fieldarray = new Array[size]; // hold all the nc_vlen_t instance data for (int i = 0; i < size; i++) { Array vlenArray = decodeVlen(m.getDataType(), destPos, bb); fieldarray[i] = vlenArray; destPos += nc_vlen_t_size;
public static int showOffsets(StructureMembers members, Indent indent, Formatter f) { int offset = 0; for (StructureMembers.Member m : members.getMembers()) { f.format("%s%s offset=%d (%d %s = %d bytes)%n", indent, m.getName(), m.getDataParam(), m.getSize(), m.getDataType(), m.getSizeBytes()); if (m.getStructureMembers() != null) { indent.incr(); StructureMembers nested = m.getStructureMembers(); f.format("%n%s%s == %d bytes%n", indent, nested.getName(), nested.getStructureSize()); showOffsets(nested, indent, f); indent.decr(); } } return offset; }
public ArrayStructure getArrayStructure(int recnum, StructureMembers.Member m) { if (m.getDataType() == DataType.STRUCTURE) { ArrayStructure data = (ArrayStructure) m.getDataArray(); // we need to subset this array structure to deal with just the subset for this recno // use "brute force" for now, see if we can finesse later int count = m.getSize(); StructureData[] sdata = new StructureData[count]; for (int i=0; i<count; i++) sdata[i] = data.getStructureData( recnum * count + i); return new ArrayStructureW( data.getStructureMembers(), m.getShape(), sdata); } throw new IllegalArgumentException("Type is " + m.getDataType() + ", must be Structure"); }
void convertHeap(ArrayStructureBB asbb, int pos, StructureMembers sm) throws java.io.IOException, InvalidRangeException { ByteBuffer bb = asbb.getByteBuffer(); for (StructureMembers.Member m : sm.getMembers()) { if (m.getDataType() == DataType.STRING) { m.setDataObject(ByteOrder.nativeOrder()); // the index is always written in "native order" int size = m.getSize(); int destPos = pos + m.getDataParam(); String[] result = new String[size]; for (int i = 0; i < size; i++) } else if (m.isVariableLength()) { int startPos = pos + m.getDataParam(); bb.order(ByteOrder.LITTLE_ENDIAN); ByteOrder bo = (ByteOrder) m.getDataObject(); int endian = bo.equals(ByteOrder.LITTLE_ENDIAN) ? RandomAccessFile.LITTLE_ENDIAN : RandomAccessFile.BIG_ENDIAN; int[] fieldshape = m.getShape(); int prefixrank = 0; int size = 1; size *= fieldshape[prefixrank]; assert size == m.getSize() : "Internal error: field size mismatch"; Array[] fieldarray = new Array[size]; // hold all the vlen instance data Array vlenArray = headerParser.readHeapVlen(bb, destPos, m.getDataType(), endian); fieldarray[i] = vlenArray;
void convertHeap(ArrayStructureBB asbb, int pos, StructureMembers sm) throws java.io.IOException, InvalidRangeException { ByteBuffer bb = asbb.getByteBuffer(); for (StructureMembers.Member m : sm.getMembers()) { if (m.getDataType() == DataType.STRING) { m.setDataObject(ByteOrder.nativeOrder()); // the index is always written in "native order" int size = m.getSize(); int destPos = pos + m.getDataParam(); String[] result = new String[size]; for (int i = 0; i < size; i++) result[i] = headerParser.readHeapString(bb, destPos + i * 16); // 16 byte "heap ids" are in the ByteBuffer int index = asbb.addObjectToHeap(result); bb.order(ByteOrder.nativeOrder()); // the string index is always written in "native order" bb.putInt(destPos, index); // overwrite with the index into the StringHeap } else if (m.isVariableLength()) { int destPos = pos + m.getDataParam(); bb.order(ByteOrder.LITTLE_ENDIAN); ByteOrder bo = (ByteOrder) m.getDataObject(); int endian = bo.equals(ByteOrder.LITTLE_ENDIAN) ? RandomAccessFile.LITTLE_ENDIAN : RandomAccessFile.BIG_ENDIAN; Array vlenArray = headerParser.readHeapVlen(bb, destPos, m.getDataType(), endian); int index = asbb.addObjectToHeap(vlenArray); bb.order(ByteOrder.nativeOrder()); // the string index is always written in "native order" bb.putInt(destPos, index); // overwrite with the index into the StringHeap } } }
private void convertHeap(ArrayStructureBB asbb, int pos, StructureMembers sm) throws java.io.IOException { ByteBuffer bb = asbb.getByteBuffer(); for (StructureMembers.Member m : sm.getMembers()) { if (m.getDataType() == DataType.STRING) { int size = m.getSize(); int destPos = pos + m.getDataParam(); String[] result = new String[size]; for (int i = 0; i < size; i++) { long addr = bb.getLong(pos); Pointer p = new MyPointer(addr); result[i] = p.getString(0, false); } int index = asbb.addObjectToHeap(result); bb.putInt(destPos, index); // overwrite with the index into the StringHeap } else if (m.isVariableLength()) { int destPos = pos + m.getDataParam(); Array result = decodeVlen(m.getDataType(), pos + m.getDataParam(), bb); int index = asbb.addObjectToHeap(result); bb.order(ByteOrder.nativeOrder()); // the string index is always written in "native order" bb.putInt(destPos, index); // overwrite with the index into the StringHeap } } }
public Array readReport(Variable v, Section section) throws IOException, InvalidRangeException { //coverity[FB.BC_UNCONFIRMED_CAST] Structure s = (Structure) v; StructureMembers members = s.makeStructureMembers(); for (Variable v2 : s.getVariables()) { Vinfo vinfo = (Vinfo) v2.getSPobject(); StructureMembers.Member m = members.findMember(v2.getShortName()); m.setDataParam(vinfo.offset); } int size = (int) section.computeSize(); ArrayStructureBB abb = new ArrayStructureBB(members, new int[]{size}); ByteBuffer bb = abb.getByteBuffer(); Range range = section.getRange(0); for (int idx : range) { Report report = reports.get(idx); report.loadStructureData(abb, bb); } return abb; }
public Array readReport(Variable v, Section section) throws IOException, InvalidRangeException { //coverity[FB.BC_UNCONFIRMED_CAST] Structure s = (Structure) v; StructureMembers members = s.makeStructureMembers(); for (Variable v2 : s.getVariables()) { Vinfo vinfo = (Vinfo) v2.getSPobject(); StructureMembers.Member m = members.findMember(v2.getShortName()); m.setDataParam(vinfo.offset); } int size = (int) section.computeSize(); ArrayStructureBB abb = new ArrayStructureBB(members, new int[]{size}); ByteBuffer bb = abb.getByteBuffer(); Range r = section.getRange(0); for (int i = r.first(); i <= r.last(); i += r.stride()) { Report report = reports.get(i); report.loadStructureData(abb, bb); } return abb; }
public Array readReportIndex(Variable v, Section section) throws IOException, InvalidRangeException { //coverity[FB.BC_UNCONFIRMED_CAST] Structure s = (Structure) v; StructureMembers members = s.makeStructureMembers(); for (Variable v2 : s.getVariables()) { Vinfo vinfo = (Vinfo) v2.getSPobject(); StructureMembers.Member m = members.findMember(v2.getShortName()); m.setDataParam(vinfo.offset); } int size = (int) section.computeSize(); ArrayStructureBB abb = new ArrayStructureBB(members, new int[]{size}); ByteBuffer bb = abb.getByteBuffer(); Range r = section.getRange(0); for (int i = r.first(); i <= r.last(); i += r.stride()) { Report report = reports.get(i); report.loadIndexData(bb); } return abb; }
public Array readReportIndex(Variable v, Section section) throws IOException, InvalidRangeException { //coverity[FB.BC_UNCONFIRMED_CAST] Structure s = (Structure) v; StructureMembers members = s.makeStructureMembers(); for (Variable v2 : s.getVariables()) { Vinfo vinfo = (Vinfo) v2.getSPobject(); StructureMembers.Member m = members.findMember(v2.getShortName()); m.setDataParam(vinfo.offset); } int size = (int) section.computeSize(); ArrayStructureBB abb = new ArrayStructureBB(members, new int[]{size}); ByteBuffer bb = abb.getByteBuffer(); Range range = section.getRange(0); for (int idx : range) { Report report = reports.get(idx); report.loadIndexData(bb); } return abb; }
/** * Set the offsets, based on m.getSizeBytes(). * Also sets members.setStructureSize(). * @param members set offsets for these members * @return the total size */ public static int setOffsets(StructureMembers members) { int offset = 0; for (StructureMembers.Member m : members.getMembers()) { m.setDataParam(offset); offset += m.getSizeBytes(); // set inner offsets (starts again at 0) if (m.getStructureMembers() != null) setOffsets(m.getStructureMembers()); } members.setStructureSize(offset); return offset; }
public Array readReport(Variable v, Section section) throws IOException, InvalidRangeException { Structure s = (Structure) v; StructureMembers members = s.makeStructureMembers(); for (Variable v2 : s.getVariables()) { Vinfo vinfo = (Vinfo) v2.getSPobject(); StructureMembers.Member m = members.findMember(v2.getShortName()); m.setDataParam(vinfo.offset); } int size = (int) section.computeSize(); ArrayStructureBB abb = new ArrayStructureBB(members, new int[]{size}); ByteBuffer bb = abb.getByteBuffer(); Range r = section.getRange(0); for (int i = r.first(); i <= r.last(); i += r.stride()) { Report report = reports.get(i); report.loadStructureData(abb, bb); } return abb; }
private StructureMembers createStructureMembers(UserType userType) { StructureMembers sm = new StructureMembers(userType.name); for (Field fld : userType.flds) { StructureMembers.Member m = sm.addMember(fld.name, null, null, fld.ctype.dt, fld.dims); m.setDataParam(fld.offset); if (fld.ctype.isVen) { m.setShape(new int[]{-1}); } if (fld.ctype.dt == DataType.STRUCTURE) { UserType nested_utype = userTypes.get(fld.fldtypeid); StructureMembers nested_sm = createStructureMembers(nested_utype); m.setStructureMembers(nested_sm); } } sm.setStructureSize(userType.size); return sm; }
/** * Set the offsets, based on m.getSizeBytes(). * Also sets members.setStructureSize(). * @param members set offsets for these members * @return the total size */ public static int setOffsets(StructureMembers members) { int offset = 0; for (StructureMembers.Member m : members.getMembers()) { m.setDataParam(offset); offset += m.getSizeBytes(); // set inner offsets (starts again at 0) if (m.getStructureMembers() != null) setOffsets(m.getStructureMembers()); } members.setStructureSize(offset); return offset; }
/** * Set the offsets, based on m.getSizeBytes(). * Also sets members.setStructureSize(). * @param members set offsets for these members * @return the total size */ public static int setOffsets(StructureMembers members) { int offset = 0; for (StructureMembers.Member m : members.getMembers()) { m.setDataParam(offset); offset += m.getSizeBytes(); // set inner offsets (starts again at 0) if (m.getStructureMembers() != null) setOffsets(m.getStructureMembers()); } members.setStructureSize(offset); return offset; }
public Array readReportIndex(Variable v, Section section) throws IOException, InvalidRangeException { Structure s = (Structure) v; StructureMembers members = s.makeStructureMembers(); for (Variable v2 : s.getVariables()) { Vinfo vinfo = (Vinfo) v2.getSPobject(); StructureMembers.Member m = members.findMember(v2.getShortName()); m.setDataParam(vinfo.offset); } int size = (int) section.computeSize(); ArrayStructureBB abb = new ArrayStructureBB(members, new int[]{size}); ByteBuffer bb = abb.getByteBuffer(); Range r = section.getRange(0); for (int i = r.first(); i <= r.last(); i += r.stride()) { Report report = reports.get(i); report.loadIndexData(bb); } return abb; }
public int[] getShape() { return m.getShape(); } public List<Dimension> getDimensions() {
private StructureMembers createStructureMembers(UserType userType) { StructureMembers sm = new StructureMembers(userType.name); for (Field fld : userType.flds) { StructureMembers.Member m = sm.addMember(fld.name, null, null, fld.ctype.dt, fld.dims); m.setDataParam(fld.offset); /* This should already have been taken care of if(fld.ctype.isVlen) {m.setShape(new int[]{-1}); } */ if (fld.ctype.dt == DataType.STRUCTURE) { UserType nested_utype = userTypes.get(fld.fldtypeid); StructureMembers nested_sm = createStructureMembers(nested_utype); m.setStructureMembers(nested_sm); } } sm.setStructureSize(userType.size); return sm; }
public int[] getShape() { return m.getShape(); } public List<Dimension> getDimensions() {
public int getRank() { return m.getShape().length; } public int[] getShape() { return m.getShape(); }