Another option would be to play the relational database game and split 
'offsets' into a different dataset. Connect the items with some key (an index?) 
and perhaps a length. Of course connecting the dots is a manual procedure.

Depending on what you're doing this might not be terribly efficient. I've used 
this pattern a fair amount. Most of my accesses are sequential, so I can just 
maintain an index for each dataset. In this case, getting the next set of 
offsets is an increment while keys match.


Scott

From: Hdf-forum [mailto:[email protected]] On Behalf Of Gerd 
Heber
Sent: Monday, October 28, 2013 5:13 PM
To: HDF Users Discussion List
Subject: Re: [Hdf-forum] Creating/storing data of variable length compound 
members

Nick, there's, as usual, no single right answer.
What's the average length of 'offsets' and what's
the length variability?
( 'size_t' is not a good starting point for a machine
independent representation.)

Representing 'offsets' a VLEN has its price: you'll loose
some performance and the ability to use compression on the data set.

If there's a sensible upper bound on the length and only slight
variation in the length, you might stick with a (fixed-size) ARRAY
component.

A compromise would be to separate the two parts of your compound
and have a 'bounding boxes' (+ HDF5 reference) dataset and an 'offsets'
dataset. Entries in the former would be compounds of your
bounding boxes and an HDF5 region reference into a global
'offsets' dataset. (In this simple case, you can think of a region
reference as a (offset, count) pair which references a contiguous
region in a global 'offsets' dataset.)

G.



From: Hdf-forum [mailto:[email protected]] On Behalf Of 
Nicholas Yue
Sent: Monday, October 28, 2013 3:53 PM
To: HDF Users Discussion List
Subject: [Hdf-forum] Creating/storing data of variable length compound members

Hi,

  I would like to store a collection of the following as a compound data

struct MyBox {
  double minX;
  double minY;
  double minZ;
  double maxX;
  double maxY;
  double maxZ;
  std::vector<size_t> offsets;
};

  I have no problem with the POD min* and max*

  However, I am unsure how best to handle std::vector<size_t>

  I read about variable length for string and was wondering if the information 
is applicable.

  Which example code should I consult to have a better understand of variable 
length as used within a compound type ?

Cheers
--
Nicholas Yue
Graphics - RenderMan, Visualization, OpenGL, HDF5
Custom Dev - C++ porting, OSX, Linux, Windows
http://au.linkedin.com/in/nicholasyue
https://vimeo.com/channels/naiadtools

________________________________

This e-mail and any files transmitted with it may be proprietary and are 
intended solely for the use of the individual or entity to whom they are 
addressed. If you have received this e-mail in error please notify the sender. 
Please note that any views or opinions presented in this e-mail are solely 
those of the author and do not necessarily represent those of Exelis Inc. The 
recipient should check this e-mail and any attachments for the presence of 
viruses. Exelis Inc. accepts no liability for any damage caused by any virus 
transmitted by this e-mail.
_______________________________________________
Hdf-forum is for HDF software users discussion.
[email protected]
http://mail.lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org

Reply via email to