cdm/src/main/java/ucar/nc2/iosp/hdf5/H5iosp.java
private boolean convertStructure(Structure s, StructureMembers sm ) {
    boolean hasHeap = false;
    for (StructureMembers.Member m : sm.getMembers()) {
      Variable v2 = s.findVariable(m.getName());
      assert v2 != null;
      H5header.Vinfo vm = (H5header.Vinfo) v2.getSPobject();

      // apparently each member may have seperate byte order (!!!??)
      if (vm.typeInfo.endian >= 0)
        m.setDataObject(vm.typeInfo.endian == RandomAccessFile.LITTLE_ENDIAN ? ByteOrder.LITTLE_ENDIAN : ByteOrder.BIG_ENDIAN);

      // vm.dataPos : offset since start of Structure
      m.setDataParam((int) vm.dataPos);

      // track if there is a heap
      if (v2.getDataType() == DataType.STRING || v2.isVariableLength())
        hasHeap = true;

      // recurse
      if (v2 instanceof Structure) {
        Structure nested = (Structure) v2;
        StructureMembers nestSm = nested.makeStructureMembers();
        m.setStructureMembers(nestSm);
        hasHeap |= convertStructure(nested, nestSm);
      }
    }
    return hasHeap;
  }
private boolean convertStructure(Structure s, StructureMembers sm ) {
    boolean hasHeap = false;
    for (StructureMembers.Member m : sm.getMembers()) {
      Variable v2 = s.findVariable(m.getName());
      assert v2 != null;
      H5header.Vinfo vm = (H5header.Vinfo) v2.getSPobject();

      // apparently each member may have seperate byte order (!!!??)
      if (vm.typeInfo.endian >= 0)
        m.setDataObject(vm.typeInfo.endian == RandomAccessFile.LITTLE_ENDIAN ? ByteOrder.LITTLE_ENDIAN : ByteOrder.BIG_ENDIAN);

      // vm.dataPos : offset since start of Structure
      m.setDataParam((int) vm.dataPos);

      // track if there is a heap
      if (v2.getDataType() == DataType.STRING || v2.isVariableLength())
        hasHeap = true;

      // recurse
      if (v2 instanceof Structure) {
        Structure nested = (Structure) v2;
        StructureMembers nestSm = nested.makeStructureMembers();
        m.setStructureMembers(nestSm);
        hasHeap |= convertStructure(nested, nestSm);
      }
    }
    return hasHeap;
  }
private boolean convertStructure ( Structure s , StructureMembers sm ) { boolean hasHeap = false ; for ( StructureMembers . Member m : sm . getMembers ( ) ) { Variable v2 = s . findVariable ( m . getName ( ) ) ; assert v2 != null ; H5header . Vinfo vm = ( H5header . Vinfo ) v2 . getSPobject ( ) ; // apparently each member may have seperate byte order (!!!??) if ( vm . typeInfo . endian >= 0 ) m . setDataObject ( vm . typeInfo . endian == RandomAccessFile . LITTLE_ENDIAN ? ByteOrder . LITTLE_ENDIAN : ByteOrder . BIG_ENDIAN ) ; // vm.dataPos : offset since start of Structure m . setDataParam ( ( int ) vm . dataPos ) ; // track if there is a heap if ( v2 . getDataType ( ) == DataType . STRING || v2 . isVariableLength ( ) ) hasHeap = true ; // recurse if ( v2 instanceof Structure ) { Structure nested = ( Structure ) v2 ; StructureMembers nestSm = nested . makeStructureMembers ( ) ; m . setStructureMembers ( nestSm ) ; hasHeap |= convertStructure ( nested , nestSm ) ; } } return hasHeap ; }
recursive
recursive