/** * Read some or all datasets from a single message * * @param ama place data into here in order (may be null). iterators must be already set. * @param m read this message * @param raf from this file * @param r which datasets, reletive to this message. null == all. * @param f output bit count debugging info (may be null) * @throws IOException on read error */ public void readData(ArrayStructureMA ama, Message m, RandomAccessFile raf, Range r, Formatter f) throws IOException { // map dkey to Member recursively HashMap<DataDescriptor, StructureMembers.Member> map = null; if (ama != null) { map = new HashMap<DataDescriptor, StructureMembers.Member>(2*ama.getMembers().size()); associateMessage2Members(ama.getStructureMembers(), m.getRootDataDescriptor(), map); } readData(m, raf, f, new Request(ama, map, r)); }
/** * Read some or all datasets from a single message * * @param ama place data into here in order (may be null). iterators must be already set. * @param m read this message * @param raf from this file * @param r which datasets, reletive to this message. null == all. * @param f output bit count debugging info (may be null) * @throws IOException on read error */ public void readData(ArrayStructureMA ama, Message m, RandomAccessFile raf, Range r, Formatter f) throws IOException { // map dkey to Member recursively HashMap<DataDescriptor, StructureMembers.Member> map = null; if (ama != null) { map = new HashMap<>(2*ama.getMembers().size()); associateMessage2Members(ama.getStructureMembers(), m.getRootDataDescriptor(), map); } readData(m, raf, f, new Request(ama, map, r)); }
setIterators(ama); members = ama.getStructureMembers(); nmap = new HashMap<DataDescriptor, StructureMembers.Member>(2*members.getMembers().size()); associateMessage2Members(members, seqdd, nmap);
setIterators(ama); members = ama.getStructureMembers(); nmap = new HashMap<>(2*members.getMembers().size()); associateMessage2Members(members, seqdd, nmap);
/** * Read all datasets from a single message * @param s outer variables * @param proto prototype message, has been processed * @param m read this message * @param raf from this file * @param f output bit count debugging info (may be null) * @return ArrayStructure with all the data from the message in it. * @throws IOException on read error */ public ArrayStructure readEntireMessage(Structure s, Message proto, Message m, RandomAccessFile raf, Formatter f) throws IOException { // transfer info (refersTo, name) from the proto message DataDescriptor.transferInfo(proto.getRootDataDescriptor().getSubKeys(), m.getRootDataDescriptor().getSubKeys()); // allocate ArrayStructureMA for outer structure int n = m.getNumberDatasets(); ArrayStructureMA ama = ArrayStructureMA.factoryMA(s, new int[] {n}); setIterators(ama); // map dkey to Member recursively HashMap<DataDescriptor, StructureMembers.Member> map = new HashMap<>(100); associateMessage2Members(ama.getStructureMembers(), m.getRootDataDescriptor(), map); readData(m, raf, f, new Request(ama, map, null)); return ama; }
/** * Read all datasets from a single message * @param s outer variables * @param proto prototype message, has been processed * @param m read this message * @param raf from this file * @param f output bit count debugging info (may be null) * @return ArrayStructure with all the data from the message in it. * @throws IOException on read error */ public ArrayStructure readEntireMessage(Structure s, Message proto, Message m, RandomAccessFile raf, Formatter f) throws IOException { // transfer info (refersTo, name) from the proto message DataDescriptor.transferInfo(proto.getRootDataDescriptor().getSubKeys(), m.getRootDataDescriptor().getSubKeys()); // allocate ArrayStructureMA for outer structure int n = m.getNumberDatasets(); ArrayStructureMA ama = ArrayStructureMA.factoryMA(s, new int[] {n}); setIterators(ama); // map dkey to Member recursively HashMap<DataDescriptor, StructureMembers.Member> map = new HashMap<DataDescriptor, StructureMembers.Member>(100); associateMessage2Members(ama.getStructureMembers(), m.getRootDataDescriptor(), map); readData(m, raf, f, new Request(ama, map, null)); return ama; }
public static void setIterators(ArrayStructureMA ama) { StructureMembers sms = ama.getStructureMembers(); for (StructureMembers.Member sm : sms.getMembers()) { //System.out.printf("doin %s%n", sm.getName()); //if (sm.getName().startsWith("first")) // System.out.println("HEY"); Array data = sm.getDataArray(); if (data instanceof ArrayStructureMA) { setIterators( (ArrayStructureMA) data); } else { int[] shape = data.getShape(); if ((shape.length > 1) && (sm.getDataType() != DataType.CHAR)) { Array datap; if (shape.length == 2) datap = data.transpose(0, 1); else { int[] pdims = new int[shape.length]; // (0,1,2,3...) -> (1,2,3...,0) for (int i=0; i< shape.length-1; i++) pdims[i] = i+1; datap = data.permute( pdims); } sm.setDataObject(datap.getIndexIterator()); } else { sm.setDataObject(data.getIndexIterator()); } } } }
public static void setIterators(ArrayStructureMA ama) { StructureMembers sms = ama.getStructureMembers(); for (StructureMembers.Member sm : sms.getMembers()) { //System.out.printf("doin %s%n", sm.getName()); //if (sm.getName().startsWith("first")) // System.out.println("HEY"); Array data = sm.getDataArray(); if (data instanceof ArrayStructureMA) { setIterators( (ArrayStructureMA) data); } else { int[] shape = data.getShape(); if ((shape.length > 1) && (sm.getDataType() != DataType.CHAR)) { Array datap; if (shape.length == 2) datap = data.transpose(0, 1); else { int[] pdims = new int[shape.length]; // (0,1,2,3...) -> (1,2,3...,0) for (int i=0; i< shape.length-1; i++) pdims[i] = i+1; datap = data.permute( pdims); } sm.setDataObject(datap.getIndexIterator()); } else { sm.setDataObject(data.getIndexIterator()); } } } }
StructureMembers.Member f2 = as.getStructureMembers().findMember("f2"); short[] f2data = as.getJavaArrayShort(2, f2); assert f2data[0] == 20; StructureMembers.Member nested1 = as.getStructureMembers().findMember("nested1"); ArrayStructure nested1Data = as.getArrayStructure(2, nested1);