diff options
36 files changed, 15015 insertions, 13503 deletions
diff --git a/doxygen/Doxyfile.in b/doxygen/Doxyfile.in index 0197870..0b54a3e 100644 --- a/doxygen/Doxyfile.in +++ b/doxygen/Doxyfile.in @@ -1,4 +1,4 @@ -# Doxyfile 1.8.18 +# Doxyfile # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -853,27 +853,18 @@ INPUT_ENCODING = UTF-8 # C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, # *.vhdl, *.ucf, *.qsf and *.ice. -FILE_PATTERNS = H5*public.h \ - H5*module.h \ - H5FDcore.h \ - H5FDdirect.h \ - H5FDfamily.h \ - H5FDhdfs.h \ - H5FDlog.h \ - H5FDmirror.h \ - H5FDmpi.h \ - H5FDmpio.h \ - H5FDmulti.h \ - H5FDros3.h \ - H5FDsec2.h \ - H5FDsplitter.h \ - H5FDstdio.h \ - H5FDwindows.h \ - H5version.h \ - H5*.java \ - HDF*.java \ - *.F90 \ - *.dox +FILE_PATTERNS = H5*public.h H5*module.h H5*develop.h H5FD*.h \ + H5version.h \ + H5*.java \ + HDF*.java \ + *.F90 \ + *.dox \ + H5Cpp.h H5AbstractDs.h H5AtomType.h H5Attribute.h H5CommonFG.h H5CompType.h \ + H5DataSet.h H5DataSpace.h H5DataType.h H5OcreatProp.h H5DaccProp.h H5DcreatProp.h \ + H5DxferProp.h H5EnumType.h H5Exception.h H5FaccProp.h H5FcreatProp.h H5File.h \ + H5FloatType.h H5Group.h H5IdComponent.h H5Include.h H5IntType.h H5LcreatProp.h \ + H5LaccProp.h H5Library.h H5Location.h H5Object.h H5PredType.h H5PropList.h H5StrType.h \ + H5ArrayType.h H5VarLenType.h # The RECURSIVE tag can be used to specify whether or not subdirectories should # be searched for input files as well. @@ -904,7 +895,15 @@ EXCLUDE_SYMLINKS = NO # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* -EXCLUDE_PATTERNS = +EXCLUDE_PATTERNS = */fortran/test/* +EXCLUDE_PATTERNS += */fortran/testpar/* +EXCLUDE_PATTERNS += */fortran/examples/* +EXCLUDE_PATTERNS += */fortran/src/*.c +EXCLUDE_PATTERNS += */fortran/src/*.h +EXCLUDE_PATTERNS += */hl/fortran/examples/* +EXCLUDE_PATTERNS += */hl/fortran/test/* +EXCLUDE_PATTERNS += */hl/fortran/src/*.c +EXCLUDE_PATTERNS += */hl/fortran/src/*.h # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the diff --git a/doxygen/dox/MetadataCachingInHDF5.dox b/doxygen/dox/MetadataCachingInHDF5.dox index b84ddea..ce7f0df 100644 --- a/doxygen/dox/MetadataCachingInHDF5.dox +++ b/doxygen/dox/MetadataCachingInHDF5.dox @@ -724,7 +724,7 @@ is allowed to write to file, and then only after entering a sync point with the other caches. After it writes entries to file, it sends the base addresses of the now clean entries to the other caches, so they can mark these entries clean as well, and then leaves the sync point. The other caches mark the specified -entries as clean before they leave the synch point as well. (Observe, that since +entries as clean before they leave the sync point as well. (Observe, that since all caches see the same stream of dirty metadata, they will all have the same set of dirty entries upon sync point entry and exit.) diff --git a/doxygen/dox/Overview.dox b/doxygen/dox/Overview.dox index 8f428b5..dbaefff 100644 --- a/doxygen/dox/Overview.dox +++ b/doxygen/dox/Overview.dox @@ -24,6 +24,7 @@ documents cover a mix of tasks, concepts, and reference, to help a specific Version-specific documentation (see the version in the title area) can be found here: - HDF5 <code>1.10</code> branch (this site) + - <a href="https://docs.hdfgroup.org/hdf5/v1_14/index.html">HDF5 1.14.x</a> - <a href="https://docs.hdfgroup.org/hdf5/v1_12/index.html">HDF5 1.12.x</a> - <a href="https://docs.hdfgroup.org/hdf5/v1_10/index.html">HDF5 1.10.x</a> - <a href="https://docs.hdfgroup.org/hdf5/v1_8/index.html">HDF5 1.8.x</a> diff --git a/doxygen/dox/PredefinedDatatypeTables.dox b/doxygen/dox/PredefinedDatatypeTables.dox new file mode 100644 index 0000000..fbafa94 --- /dev/null +++ b/doxygen/dox/PredefinedDatatypeTables.dox @@ -0,0 +1,22 @@ +/** \page predefined_datatypes_tables HDF5 Predefined Datatypes + * + * The following datatypes are predefined in HDF5. + * + * \snippet{doc} tables/predefinedDatatypes.dox predefined_ieee_datatypes_table + * + * \snippet{doc} tables/predefinedDatatypes.dox predefined_std_datatypes_table + * + * \snippet{doc} tables/predefinedDatatypes.dox predefined_unix_datatypes_table + * + * \snippet{doc} tables/predefinedDatatypes.dox predefined_string_datatypes_table + * + * \snippet{doc} tables/predefinedDatatypes.dox predefined_intel_datatypes_table + * + * \snippet{doc} tables/predefinedDatatypes.dox predefined_dec_datatypes_table + * + * \snippet{doc} tables/predefinedDatatypes.dox predefined_mips_datatypes_table + * + * \snippet{doc} tables/predefinedDatatypes.dox predefined_native_datatypes_table + * + * \snippet{doc} tables/predefinedDatatypes.dox predefined_c9x_datatypes_table + */ diff --git a/doxygen/dox/ReferenceManual.dox b/doxygen/dox/ReferenceManual.dox index e543331..135e7e6 100644 --- a/doxygen/dox/ReferenceManual.dox +++ b/doxygen/dox/ReferenceManual.dox @@ -8,48 +8,148 @@ The functions provided by the HDF5 API are grouped into the following <tr valign="top"> <td> <table> -<tr valign="top"><td style="border: none;"> -\include{doc} core_menu.md +<caption>Core Reference Manual Modules</caption> +<tr><th>Module</th><th colspan="4">Language</th><th>Description</th></tr> +<tr> +<th>Attributes (H5A)</th><td>@ref H5A "C"</td><td>@ref H5::Attribute "C++"</td><td>@ref FH5A "Fortran"</td><td>@ref JH5A "Java"</td><td>HDF5 attribute is a small metadata object describing the nature and/or intended usage of a primary data object. +</td> +</tr> +<tr> +<th>Datasets (H5D)</th><td>@ref H5D "C"</td><td>@ref H5::DataSet "C++"</td><td>@ref FH5D "Fortran"</td><td>@ref JH5D "Java"</td><td>Manage HDF5 datasets, including the transfer of data between memory and disk and the description of dataset properties. +</td> +</tr> +<tr> +<th>Dataspaces (H5S)</th><td>@ref H5S "C"</td><td>@ref H5::DataSpace "C++"</td><td>@ref FH5S "Fortran"</td><td>@ref JH5S "Java"</td><td>HDF5 dataspaces describe the shape of datasets in memory or in HDF5 files. +</td> +</tr> +<tr> +<th>Datatypes (H5T)</th><td>@ref H5T "C"</td><td>@ref H5::DataType "C++"</td><td>@ref FH5T "Fortran"</td><td>@ref JH5T "Java"</td><td>HDF5 datatypes describe the element type of HDF5 datasets and attributes. +</td> +</tr> +<tr> +<th>Error Handling (H5E)</th><td>@ref H5E "C"</td><td>@ref H5::Exception "C++"</td><td>@ref FH5E "Fortran"</td><td>@ref JH5E "Java"</td><td>HDF5 library error reporting. +</td> +</tr> +<tr> +<th>Files (H5F)</th><td>@ref H5F "C"</td><td>@ref H5::H5File "C++"</td><td>@ref FH5F "Fortran"</td><td>@ref JH5F "Java"</td><td>Manage HDF5 files. +</td> +</tr> +<tr> +<th>Filters (H5Z)</th><td>@ref H5Z "C"</td><td>"C++"</td><td>@ref FH5Z "Fortran"</td><td>@ref JH5Z "Java"</td><td>Manage HDF5 user-defined filters +</td> +</tr> +<tr> +<th>Groups (H5G)</th><td>@ref H5G "C"</td><td>@ref H5::Group "C++"</td><td>@ref FH5G "Fortran"</td><td>@ref JH5G "Java"</td><td>Manage HDF5 groups. </td> </tr> -<tr valign="top"><td style="border: none;"> -<!-- High-level library --> -\include{doc} high_level_menu.md +<tr> +<th>Identifiers (H5I)</th><td>@ref H5I "C"</td><td>@ref H5::IdComponent "C++"</td><td>@ref FH5I "Fortran"</td><td>@ref JH5I "Java"</td><td>Manage identifiers defined by the HDF5 library. </td> </tr> -<tr valign="top"><td style="border: none;"> -<!-- Fortran library --> -\include{doc} fortran_menu.md +<tr> +<th>Library General (%H5)</th><td>@ref H5 "C"</td><td>@ref H5::H5Library "C++"</td><td>@ref FH5 "Fortran"</td><td>@ref JH5 "Java"</td><td>Manage the life cycle of HDF5 library instances. </td> </tr> -<tr valign="top"><td style="border: none;"> -<!-- Java library --> -\include{doc} java_menu.md +<tr> +<th>Links (H5L)</th><td>@ref H5L "C"</td><td>"C++"</td><td>@ref FH5L "Fortran"</td><td>@ref JH5L "Java"</td><td>Manage HDF5 links and link types. </td> </tr> <tr> -<td><a href="./deprecated.html">Deprecated functions</a></td> -<td>\ref api-compat-macros</td> +<th>Objects (H5O)</th><td>@ref H5O "C"</td><td>"C++"</td><td>@ref FH5O "Fortran"</td><td>@ref JH5O "Java"</td><td>Manage HDF5 objects (groups, datasets, datatype objects). +</td> +</tr> +<tr> +<th>Property Lists (H5P)</th><td>@ref H5P "C"</td><td>@ref H5::PropList "C++"</td><td>@ref FH5P "Fortran"</td><td>@ref JH5P "Java"</td><td>HDF5 property lists are the main vehicle to configure the behavior of HDF5 API functions. +</td> +</tr> +<tr> +<th>Dynamically-loaded Plugins (H5PL)</th><td>@ref H5PL "C"</td><td>"C++"</td><td>"Fortran"</td><td>@ref JH5PL "Java"</td><td>Manage the loading behavior of HDF5 plugins. +</td> +</tr> +<tr> +<th>References (H5R)</th><td>@ref H5R "C"</td><td>"C++"</td><td>@ref FH5R "Fortran"</td><td>@ref JH5R "Java"</td><td>Manage HDF5 references (HDF5 objects, attributes, and selections on datasets a.k.a. dataset regions). +</td> </tr> </table> - -</td></tr> -<tr><th>Mind the gap</th></tr> +<table> +<caption>High-level Reference Manual Modules</caption> +<tr><th>Module</th><th colspan="4"></th>Language<th>Description</th></tr> +<tr> +<th>HDF5 Lite APIs (H5LT,H5LD)</th><td>@ref H5LT "C"</td><td>"C++"</td><td>@ref FH5LT "Fortran"</td><td>"Java"</td><td>Functions to simplify creating and manipulating datasets, attributes and other features. +</td> +</tr> +<tr> +<th>HDF5 Images API (H5IM)</th><td>@ref H5IM "C"</td><td>"C++"</td><td>@ref FH5IM "Fortran"</td><td>"Java"</td><td>Creating and manipulating HDF5 datasets intended to be interpreted as images. +</td> +</tr> +<tr> +<th>HDF5 Table APIs (H5TB)</th><td>@ref H5TB "C"</td><td>"C++"</td><td>@ref FH5TB "Fortran"</td><td>"Java"</td><td>Creating and manipulating HDF5 datasets intended to be interpreted as tables. +</td> +</tr> +<tr> +<th>HDF5 Packet Table APIs (H5PT)</th><td>@ref H5PT "C"</td><td>"C++"</td><td>"Fortran"</td><td>"Java"</td><td>Creating and manipulating HDF5 datasets to support append- and read-only operations on table data. +</td> +</tr> +<tr> +<th>HDF5 Dimension Scales APIs (H5DS)</th><td>@ref H5DS "C"</td><td>"C++"</td><td>@ref FH5DS "Fortran"</td><td>"Java"</td><td>Creating and manipulating HDF5 datasets that are associated with the dimension of another HDF5 dataset. +</td> +</tr> +<tr> +<th>HDF5 Optimizations APIs (H5DO)</th><td>@ref H5DO "C"</td><td>"C++"</td><td>"Fortran"</td><td>"Java"</td><td>Bypassing default HDF5 behavior in order to optimize for specific use cases. +</td> +</tr> +<tr> +<th>Extensions (H5LR, H5LT)</th><td>@ref H5LR "C"</td><td>"C++"</td><td>"Fortran"</td><td>"Java"</td><td> +</td> +</tr> +</table> +</td> +</tr> <tr><td> +<table> +<caption>Additional Java Reference Manual Modules</caption> +<tr> +<td>@ref HDF5CONST</td><td>This class contains C constants and enumerated types of HDF5 library. +</td> +</tr> +<tr> +<td>@ref HDFNATIVE</td><td>This class encapsulates native methods to deal with arrays of numbers, converting from numbers to bytes and bytes to numbers. +</td> +</tr> +<tr> +<td>@ref HDFARRAY</td><td>This is a class for handling multidimensional arrays for HDF. +</td> +</tr> +<tr> +<td>@ref ERRORS</td><td>The class HDF5Exception returns errors from the Java HDF5 Interface. +</td> +</tr> +</table> +</td> +</tr> +<tr> +<td> +\ref predefined_datatypes_tables<br /> +<a href="./deprecated.html">Deprecated functions</a><br /> +Functions with \ref ASYNC<br /> +\ref api-compat-macros +</td> +</tr> +</table> + Follow these simple rules and stay out of trouble: -\li \Bold{Handle discipline:} The HDF5 C-API is rife with handles or +\li \Bold{Handle discipline:} The HDF5 API is rife with handles or identifiers, which you typically obtain by creating new HDF5 items, copying - items, or retrieving facets of items. \Emph{You acquire a handle, you own it!} - (Colin Powell) In other words, you are responsible for releasing the underlying + items, or retrieving facets of items. Consequently, \Bold{and most importantly}, you are + responsible for releasing the underlying resources via the matching \Code{H5*close()} call, or deal with the consequences of resource leakage. \li \Bold{Closed means closed:} Do not pass identifiers that were previously \Code{H5*close()}-d to other API functions! It will generate an error. \li \Bold{Dynamic memory allocation:} The API contains a few functions in which the HDF5 library dynamically allocates memory on the caller's behalf. The caller owns - this memory and eventually must free it by calling H5free_memory(). (\Bold{Not} - the `free` function \Emph{du jour}!) + this memory and eventually must free it by calling H5free_memory() and not language-explicit memory functions. \li \Bold{Be careful with that saw:} Do not modify the underlying collection when an iteration is in progress! \li \Bold{Use of locations:} Certain API functions, typically called \Code{H5***_by_name} @@ -57,7 +157,6 @@ Follow these simple rules and stay out of trouble: If the identifier fully specifies the object in question, pass \Code{'.'} (a dot) for the name! -Break a leg! </td> </tr> </table> diff --git a/doxygen/dox/ViewTools.dox b/doxygen/dox/ViewTools.dox index 82d0ed6..2212d4b 100644 --- a/doxygen/dox/ViewTools.dox +++ b/doxygen/dox/ViewTools.dox @@ -15,7 +15,7 @@ The following are basic facts about HDF5 files to keep in mind while completing <table> <tr> <th>Tutorial Topic</th> -<th>Descriptionn</th> +<th>Description</th> </tr> <tr> <td> @@ -829,6 +829,7 @@ by simply viewing the specified dataset with the <code style="background-color:w \code h5dump -d "HDFEOS/GRIDS/OMI Column Amount O3/Data Fields/SolarZenithAngle" OMI-Aura.he5 \endcode + Subsetting narrows down the output that is displayed. In the following example, the first 15x10 elements (-c "15,10") are specified, beginning with position (0,0) (-s "0,0"): \code @@ -840,11 +841,8 @@ If using the shorthand method, specify: h5dump -A 0 -d "HDFEOS/GRIDS/OMI Column Amount O3/Data Fields/SolarZenithAngle[0,0;;15,10;]" -w 0 OMI-Aura.he5 \endcode -Where, -\par The <code style="background-color:whitesmoke;">-d</code> option must be specified - -before -\par subsetting options (if not using the shorthand method). +Where, the <code style="background-color:whitesmoke;">-d</code> option must be specified +before subsetting options (if not using the shorthand method). The <code style="background-color:whitesmoke;">-A 0</code> option suppresses the printing of attributes. diff --git a/doxygen/dox/cookbook/Accessibility.dox b/doxygen/dox/cookbook/Accessibility.dox index f100283..28009be 100644 --- a/doxygen/dox/cookbook/Accessibility.dox +++ b/doxygen/dox/cookbook/Accessibility.dox @@ -1,6 +1,6 @@ /** \page Accessibility -\section Accessibility +\section secAccessibility Accessibility \subsection CB_MaintainCompat Maintaining Compatibility with other HDF5 Library Versions diff --git a/doxygen/dox/cookbook/Attributes.dox b/doxygen/dox/cookbook/Attributes.dox index 68fd159..5914909 100644 --- a/doxygen/dox/cookbook/Attributes.dox +++ b/doxygen/dox/cookbook/Attributes.dox @@ -1,6 +1,6 @@ /** \page Attributes -\section Attributes +\section secAttributes Attributes \subsection CB_LargeAttributes Creating "Large" HDF5 Attributes diff --git a/doxygen/dox/cookbook/Files.dox b/doxygen/dox/cookbook/Files.dox index 169d638..4893771 100644 --- a/doxygen/dox/cookbook/Files.dox +++ b/doxygen/dox/cookbook/Files.dox @@ -1,6 +1,6 @@ /** \page Files -\section Files +\section secFiles Files \subsection CB_FreeSpace Tracking Free Space in HDF5 Files diff --git a/doxygen/dox/cookbook/Performance.dox b/doxygen/dox/cookbook/Performance.dox index 7ac3a18..5e945b2 100644 --- a/doxygen/dox/cookbook/Performance.dox +++ b/doxygen/dox/cookbook/Performance.dox @@ -1,6 +1,6 @@ /** \page Performance -\section Performance +\section secPerformance Performance \subsection CB_MDCPerf Assessing HDF5 Metadata Cache Performance diff --git a/doxygen/dox/high_level/extension.dox b/doxygen/dox/high_level/extension.dox index e8471b9..d754b96 100644 --- a/doxygen/dox/high_level/extension.dox +++ b/doxygen/dox/high_level/extension.dox @@ -8,13 +8,16 @@ * These functions were created as part of a project supporting * NPP/NPOESS Data Production and Exploitation ( * <a href="https://support.hdfgroup.org/projects/jpss/documentation"> - * project</a>, software). + * project</a>, <a href="https://gamma.hdfgroup.org/ftp/pub/outgoing/NPOESS/source"> + * software </a>). * While they were written to facilitate access to NPP, NPOESS, and JPSS * data in the HDF5 format, these functions may be useful to anyone working * with region references, hyperslab selections, or bit-fields. * - * Note that these functions are not part of the standard HDF5 distribution; - * the software must be separately downloaded and installed. + * Note that these functions are not part of the standard HDF5 distribution; + * the <a href="https://gamma.hdfgroup.org/ftp/pub/outgoing/NPOESS/source"> + * software </a> + * must be separately downloaded and installed. * * A comprehensive guide to this library, * <a href="https://support.hdfgroup.org/projects/jpss/documentation/HL/UG/NPOESS_HL-UG.pdf"> @@ -28,7 +31,7 @@ * \n Copies data from a referenced region to a region in a destination dataset. * - \ref H5LRcreate_ref_to_all * \n Creates a dataset with the region references to the data in all datasets located under a - * specified group in a file or creates a dataset with object references to all objects (groups or datasets) + * specified group in a file or creates a dataset with object references to all objects (groups or datasets) * located under a specified group in a file. * - \ref H5LRcreate_region_references * \n Creates an array of region references using an array of paths to diff --git a/doxygen/examples/H5.format.2.0.html b/doxygen/examples/H5.format.2.0.html index 242fdea..d2979e1 100644 --- a/doxygen/examples/H5.format.2.0.html +++ b/doxygen/examples/H5.format.2.0.html @@ -1,289 +1,392 @@ <!DOCTYPE HTML> <html> - <head> - <title> - HDF5 File Format Specification Version 2.0 - </title> - -<style> -h1 { display: block; - margin-top: 24px; - margin-bottom: 24px; - margin-left: 0px; - margin-right: 0px; - text-indent: 0px; - } - -h2 { display: block; - margin-top: 8x; - margin-bottom: 8px; - margin-left: 0px; - margin-right: 0px; - text-indent: 0px; - } -<!-- A horizontal rule (<hr />) should be placed on the line above +<head> +<title>HDF5 File Format Specification Version 2.0</title> + +<style type="text/css"> +h1 { + display: block; + margin-top: 24px; + margin-bottom: 24px; + margin-left: 0px; + margin-right: 0px; + text-indent: 0px; +} + +h2 { + display: block; + margin-top: 8x; + margin-bottom: 8px; + margin-left: 0px; + margin-right: 0px; + text-indent: 0px; +} + +<!-- +A horizontal rule ( <hr />) should be placed on the line above each h2 tag. The h2 tags are used on the main sections along with -the hr tags. --> - -h3 { display: block; - margin-top: 8px; - margin-bottom: 8px; - margin-left: 0px; - margin-right: 0px; - text-indent: 0px; - } - -h4 { display: block; - margin-top: 8px; - margin-bottom: 8px; - margin-left: 0px; - margin-right: 0px; - text-indent: 0px; - } - -p { display: block; +the hr tags. -->h3 { + display: block; margin-top: 8px; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; text-indent: 0px; - } +} + +h4 { + display: block; + margin-top: 8px; + margin-bottom: 8px; + margin-left: 0px; + margin-right: 0px; + text-indent: 0px; +} + +p { + display: block; + margin-top: 8px; + margin-bottom: 8px; + margin-left: 0px; + margin-right: 0px; + text-indent: 0px; +} + +<!-- +p.item { + margin-left: 2em; + text-indent: -2em +} + +--> <!-- -p.item { margin-left: 2em; - text-indent: -2em - } --> -<!-- p.item2 { margin-left: 2em; text-indent: 2em} --> - -table.format { border:solid; - border-collapse:collapse; - caption-side:top; - text-align:center; - width:80%; - } -table.format th { border:ridge; - padding:4px; - width:25%; - } -table.format td { border:ridge; - padding:4px; - } -table.format caption { font-weight:bold; - font-size:larger; - } - -table.note {border:none; - text-align:right; - width:80%; - } - -table.desc { border:solid; - border-collapse:collapse; - caption-size:top; - text-align:left; - width:80%; - } -table.desc tr { vertical-align:top; - } -table.desc th { border-style:ridge; - font-size:larger; - padding:4px; - <!-- text-decoration:underline; --> - } -table.desc td { border-style:ridge; - <!-- padding: 4px; --> - vertical-align:text-top; - } -table.desc caption { font-weight:bold; - font-size:larger; - } - -table.list { border:none; - width:100% - } -table.list tr { vertical-align:text-top; - } -table.list th { border:none; - text-decoration:underline; - vertical-align:text-top; - } -table.list td { border:none; - vertical-align:text-top; - } - -table.msgdesc { border:none; - text-align:left; - width: 80% - } -table.msgdesc tr { vertical-align:text-top; - border-spacing:0; - padding:0; } -table.msgdesc th { border:none; - text-decoration:underline; - vertical-align:text-top; } -table.msgdesc td { border:none; - vertical-align:text-top; - } - -table.list80 { border:none; - width:80% - } -table.list80 tr { vertical-align:text-top; - } -table.list80 th { border:none; - text-decoration:underline; - vertical-align:text-top; - } -table.list80 td { border:none; - vertical-align:text-top; - } - -table.glossary { border:none; - text-align:left; - width: 80% - } -table.glossary tr { vertical-align:text-top; - border-spacing:0; - padding:0; } -table.glossary th { border:none; - text-align:left; - text-decoration:underline; - vertical-align:text-top; } -table.glossary td { border:none; - text-align:left; - vertical-align:text-top; - } - -div { page-break-inside:avoid; - page-break-after:auto - } +p.item2 { + margin-left: 2em; + text-indent: 2em +} +--> +table.format { + border: solid; + border-collapse: collapse; + caption-side: top; + text-align: center; + width: 80%; +} + +table.format th { + border: ridge; + padding: 4px; + width: 25%; +} + +table.format td { + border: ridge; + padding: 4px; +} + +table.format caption { + font-weight: bold; + font-size: larger; +} + +table.note { + border: none; + text-align: right; + width: 80%; +} + +table.desc { + border: solid; + border-collapse: collapse; + caption-size: top; + text-align: left; + width: 80%; +} + +table.desc tr { + vertical-align: top; +} + +table.desc th { + border-style: ridge; + font-size: larger; + padding: 4px; <!-- + text-decoration: underline; + --> +} + +table.desc td { + border-style: ridge; <!-- + padding: 4px; --> + vertical-align: text-top; +} + +table.desc caption { + font-weight: bold; + font-size: larger; +} + +table.list { + border: none; + width: 100% +} + +table.list tr { + vertical-align: text-top; +} + +table.list th { + border: none; + text-decoration: underline; + vertical-align: text-top; +} + +table.list td { + border: none; + vertical-align: text-top; +} + +table.msgdesc { + border: none; + text-align: left; + width: 80% +} + +table.msgdesc tr { + vertical-align: text-top; + border-spacing: 0; + padding: 0; +} + +table.msgdesc th { + border: none; + text-decoration: underline; + vertical-align: text-top; +} + +table.msgdesc td { + border: none; + vertical-align: text-top; +} + +table.list80 { + border: none; + width: 80% +} + +table.list80 tr { + vertical-align: text-top; +} + +table.list80 th { + border: none; + text-decoration: underline; + vertical-align: text-top; +} + +table.list80 td { + border: none; + vertical-align: text-top; +} + +table.glossary { + border: none; + text-align: left; + width: 80% +} + +table.glossary tr { + vertical-align: text-top; + border-spacing: 0; + padding: 0; +} + +table.glossary th { + border: none; + text-align: left; + text-decoration: underline; + vertical-align: text-top; +} + +table.glossary td { + border: none; + text-align: left; + vertical-align: text-top; +} + +div { + page-break-inside: avoid; + page-break-after: auto +} </style> - <center> +<center> <table border="0" width="90%"> - <tr> - <td valign="top"> - <ol type="I"> - <li><a href="#Intro">Introduction</a></li> - <font size="-1"> - <ol type="A"> - <li><a href="#ThisDocument">This Document</a></li> - <li><a href="#ChangesForHdf5_1_10">Changes for HDF5 1.10</a></li> - </ol> - </font> - - <li><a href="#FileMetaData">Disk Format: Level 0 - File Metadata</a></li> - <font size="-1"> - <ol type="A"> - <li><a href="#Superblock">Disk Format: Level 0A - Format Signature and Superblock</a></li> - <li><a href="#DriverInfo">Disk Format: Level 0B - File Driver Info</a></li> - <li><a href="#SuperblockExt">Disk Format: Level 0C - Superblock Extension</a></li> - </ol> - </font> - <li><a href="#FileInfra">Disk Format: Level 1 - File Infrastructure</a></li> - <font size="-1"> - <ol type="A"> - <li><a href="#Btrees">Disk Format: Level 1A - B-trees and B-tree - Nodes</a></li> - <ol type="1"> - <li><a href="#V1Btrees">Disk Format: Level 1A1 - Version 1 - B-trees (B-link Trees)</a></li> - <li><a href="#V2Btrees">Disk Format: Level 1A2 - Version 2 - B-trees</a></li> - </ol> - <li><a href="#SymbolTable">Disk Format: Level 1B - Group Symbol Table Nodes</a></li> - <li><a href="#SymbolTableEntry">Disk Format: Level 1C - Symbol Table Entry</a></li> - <li><a href="#LocalHeap">Disk Format: Level 1D - Local Heaps</a></li> - <li><a href="#GlobalHeap">Disk Format: Level 1E - Global Heap</a></li> - <li><a href="#FractalHeap">Disk Format: Level 1F - Fractal Heap</a></li> - <li><a href="#FreeSpaceManager">Disk Format: Level 1G - Free-space Manager</a></li> - <li><a href="#SOHMTable">Disk Format: Level 1H - Shared Object Header Message Table</a></li> - </ol> - </font> - <li><a href="#DataObject">Disk Format: Level 2 - Data Objects</a></li> - <font size="-1"> - <ol type="A"> - <li><a href="#ObjectHeader">Disk Format: Level 2A - Data Object Headers</a></li> - <ol type="1"> - <li><a href="#ObjectHeaderPrefix">Disk Format: Level 2A1 - Data Object Header Prefix</a></li> - <ol type="a"> - <li><a href="#V1ObjectHeaderPrefix">Version 1 Data Object Header Prefix</a></li> - <li><a href="#V2ObjectHeaderPrefix">Version 2 Data Object Header Prefix</a></li> - </ol> - <li><a href="#ObjectHeaderMessages">Disk Format: Level 2A2 - Data Object Header Messages</a></li> - <ol type="a"> - <li><a href="#NILMessage">The NIL Message</a></li> <!-- 0x0000 --> - <li><a href="#DataspaceMessage">The Dataspace Message</a></li> <!-- 0x0001 --> - <li><a href="#LinkInfoMessage">The Link Info Message</a></li> <!-- 0x0002 --> + <tr> + <td valign="top"> + <ol type="I"> + <li><a href="#Intro">Introduction</a></li> + <font size="-1"> + <ol type="A"> + <li><a href="#ThisDocument">This Document</a></li> + <li><a href="#ChangesForHdf5_1_10">Changes for HDF5 1.10</a></li> + </ol> + </font> + + <li><a href="#FileMetaData">Disk Format: Level 0 - File + Metadata</a></li> + <font size="-1"> + <ol type="A"> + <li><a href="#Superblock">Disk Format: Level 0A - Format + Signature and Superblock</a></li> + <li><a href="#DriverInfo">Disk Format: Level 0B - File + Driver Info</a></li> + <li><a href="#SuperblockExt">Disk Format: Level 0C - + Superblock Extension</a></li> + </ol> + </font> + <li><a href="#FileInfra">Disk Format: Level 1 - File + Infrastructure</a></li> + <font size="-1"> + <ol type="A"> + <li><a href="#Btrees">Disk Format: Level 1A - B-trees + and B-tree Nodes</a></li> + <ol type="1"> + <li><a href="#V1Btrees">Disk Format: Level 1A1 - + Version 1 B-trees (B-link Trees)</a></li> + <li><a href="#V2Btrees">Disk Format: Level 1A2 - + Version 2 B-trees</a></li> + </ol> + <li><a href="#SymbolTable">Disk Format: Level 1B - Group + Symbol Table Nodes</a></li> + <li><a href="#SymbolTableEntry">Disk Format: Level 1C - + Symbol Table Entry</a></li> + <li><a href="#LocalHeap">Disk Format: Level 1D - Local + Heaps</a></li> + <li><a href="#GlobalHeap">Disk Format: Level 1E - Global + Heap</a></li> + <li><a href="#FractalHeap">Disk Format: Level 1F - + Fractal Heap</a></li> + <li><a href="#FreeSpaceManager">Disk Format: Level 1G - + Free-space Manager</a></li> + <li><a href="#SOHMTable">Disk Format: Level 1H - Shared + Object Header Message Table</a></li> + </ol> + </font> + <li><a href="#DataObject">Disk Format: Level 2 - Data + Objects</a></li> + <font size="-1"> + <ol type="A"> + <li><a href="#ObjectHeader">Disk Format: Level 2A - Data + Object Headers</a></li> + <ol type="1"> + <li><a href="#ObjectHeaderPrefix">Disk Format: Level + 2A1 - Data Object Header Prefix</a></li> + <ol type="a"> + <li><a href="#V1ObjectHeaderPrefix">Version 1 Data + Object Header Prefix</a></li> + <li><a href="#V2ObjectHeaderPrefix">Version 2 Data + Object Header Prefix</a></li> + </ol> + <li><a href="#ObjectHeaderMessages">Disk Format: Level + 2A2 - Data Object Header Messages</a></li> + <ol type="a"> + <li><a href="#NILMessage">The NIL Message</a></li> + <!-- 0x0000 --> + <li><a href="#DataspaceMessage">The Dataspace Message</a></li> + <!-- 0x0001 --> + <li><a href="#LinkInfoMessage">The Link Info Message</a></li> + <!-- 0x0002 --> + </ol> + </ol> + </ol> + </font> </ol> - </ol> - </ol> - </font> - </ol> - </td> - - <td> </td> - - <td valign="top"> - <ol type="I" start="4"> - <li><a href="#DataObject">Disk Format: Level 2 - Data - Objects</a><font size="-1"><i> (Continued)</i></li> - <ol type="A"> - <li><a href="#ObjectHeader">Disk Format: Level 2A - Data Object - Headers</a><i> (Continued)</i></li> - <ol type="1" start="2"> - <li><a href="#ObjectHeaderMessages">Disk Format: Level 2A2 - - Data Object Header Messages</a><i> (Continued)</i></li> - <ol type="a" start="4"> - <li><a href="#DatatypeMessage">The Datatype Message</a></li> <!-- 0x0003 --> - <li><a href="#OldFillValueMessage">The Data Storage - - Fill Value (Old) Message</a></li> <!-- 0x0004 --> - <li><a href="#FillValueMessage">The Data Storage - - Fill Value Message</a></li> <!-- 0x0005 --> - <li><a href="#LinkMessage">The Link Message</a></li> <!-- 0x0006 --> - <li><a href="#ExternalFileListMessage">The Data Storage - - External Data Files Message</a></li> <!-- 0x0007 --> - <li><a href="#LayoutMessage">The Data Storage - - Layout Message</a></li> <!-- 0x0008 --> - <li><a href="#BogusMessage">The Bogus Message</a></li> <!-- 0x0009 --> - <li><a href="#GroupInfoMessage">The Group Info - Message</a></li> <!-- 0x000a --> - <li><a href="#FilterMessage">The Data Storage - - Filter Pipeline Message</a></li> <!-- 0x000b --> - <li><a href="#AttributeMessage">The Attribute - Message</a></li> <!-- 0x000c --> - <li><a href="#CommentMessage">The Object Comment - Message</a></li> <!-- 0x000d --> - <li><a href="#OldModificationTimeMessage">The Object - Modification Time (Old) Message</a></li> <!-- 0x000e --> - <li><a href="#SOHMTableMessage">The Shared Message - Table Message</a></li> <!-- 0x000f --> - <li><a href="#ContinuationMessage">The Object Header - Continuation Message</a></li> <!-- 0x0010 --> - <li><a href="#SymbolTableMessage">The Symbol - Table Message</a></li> <!-- 0x0011 --> - <li><a href="#ModificationTimeMessage">The Object - Modification Time Message</a></li> <!-- 0x0012 --> - <li><a href="#BtreeKValuesMessage">The B-tree - ‘K’ Values Message</a></li> <!-- 0x0013 --> - <li><a href="#DrvInfoMessage">The Driver Info - Message</a></li> <!-- 0x0014 --> - <li><a href="#AinfoMessage">The Attribute Info - Message</a></li> <!-- 0x0015 --> - <li><a href="#RefCountMessage">The Object Reference - Count Message</a></li> <!-- 0x0016 --> - <li><a href="#FsinfoMessage">The File Space Info - Message</a></li> <!-- 0x0018 --> + </td> + + <td> </td> + + <td valign="top"> + <ol type="I" start="4"> + <li><a href="#DataObject">Disk Format: Level 2 - Data + Objects</a><font size="-1"><i> (Continued)</i></font></li> + <ol type="A"> + <li><a href="#ObjectHeader">Disk Format: Level 2A - Data + Object Headers</a><i> (Continued)</i></li> + <ol type="1" start="2"> + <li><a href="#ObjectHeaderMessages">Disk Format: Level + 2A2 - Data Object Header Messages</a><i> (Continued)</i></li> + <ol type="a" start="4"> + <li><a href="#DatatypeMessage">The Datatype Message</a></li> + <!-- 0x0003 --> + <li><a href="#OldFillValueMessage">The Data Storage - + Fill Value (Old) Message</a></li> + <!-- 0x0004 --> + <li><a href="#FillValueMessage">The Data Storage - Fill + Value Message</a></li> + <!-- 0x0005 --> + <li><a href="#LinkMessage">The Link Message</a></li> + <!-- 0x0006 --> + <li><a href="#ExternalFileListMessage">The Data Storage + - External Data Files Message</a></li> + <!-- 0x0007 --> + <li><a href="#LayoutMessage">The Data Storage - Layout + Message</a></li> + <!-- 0x0008 --> + <li><a href="#BogusMessage">The Bogus Message</a></li> + <!-- 0x0009 --> + <li><a href="#GroupInfoMessage">The Group Info Message</a></li> + <!-- 0x000a --> + <li><a href="#FilterMessage">The Data Storage - Filter + Pipeline Message</a></li> + <!-- 0x000b --> + <li><a href="#AttributeMessage">The Attribute Message</a></li> + <!-- 0x000c --> + <li><a href="#CommentMessage">The Object Comment + Message</a></li> + <!-- 0x000d --> + <li><a href="#OldModificationTimeMessage">The Object + Modification Time (Old) Message</a></li> + <!-- 0x000e --> + <li><a href="#SOHMTableMessage">The Shared Message + Table Message</a></li> + <!-- 0x000f --> + <li><a href="#ContinuationMessage">The Object Header + Continuation Message</a></li> + <!-- 0x0010 --> + <li><a href="#SymbolTableMessage">The Symbol Table + Message</a></li> + <!-- 0x0011 --> + <li><a href="#ModificationTimeMessage">The Object + Modification Time Message</a></li> + <!-- 0x0012 --> + <li><a href="#BtreeKValuesMessage">The B-tree + ‘K’ Values Message</a></li> + <!-- 0x0013 --> + <li><a href="#DrvInfoMessage">The Driver Info Message</a></li> + <!-- 0x0014 --> + <li><a href="#AinfoMessage">The Attribute Info Message</a></li> + <!-- 0x0015 --> + <li><a href="#RefCountMessage">The Object Reference + Count Message</a></li> + <!-- 0x0016 --> + <li><a href="#FsinfoMessage">The File Space Info + Message</a></li> + <!-- 0x0018 --> + </ol> + </ol> + <li><a href="#DataStorage">Disk Format: Level 2B - Data + Object Data Storage</a></li> + </ol> + <font></font> + <li><a href="#AppendixA">Appendix A: Definitions</a></li> + <li><a href="#AppendixB">Appendix B: File Memory + Allocation Types</a></li> </ol> - </ol> - <li><a href="#DataStorage">Disk Format: Level 2B - Data Object Data Storage</a></li> - </ol> - </font> - <li><a href="#AppendixA">Appendix A: Definitions</a></li> - <li><a href="#AppendixB">Appendix B: File Memory Allocation Types</a></li> - </ol> -</td></tr> -</table> + </td> + </tr> + </table> </center> @@ -293,949 +396,984 @@ div { page-break-inside:avoid; <hr /> <a name="Intro"><h2>I. Introduction</h2></a> - <table align="right" width="100"> - <tr><td> </td><td align="center"> - <hr /> - <img src="FF-IH_FileGroup.gif" alt="HDF5 Groups" hspace="15" vspace="15"> - </td><td> </td></tr> - <tr><td> </td><td align="center"> - <strong>Figure 1:</strong> Relationships among the HDF5 root group, other groups, and objects - <hr /> - </td><td> </td></tr> - - <tr><td> </td><td align="center"> - <img src="FF-IH_FileObject.gif" alt="HDF5 Objects" hspace="15" vspace="15"> - </td><td> </td></tr> - <tr><td> </td><td align="center"> - <strong>Figure 2:</strong> HDF5 objects -- datasets, datatypes, or dataspaces - <hr /> - </td><td> </td></tr> - </table> - - - <p>The format of an HDF5 file on disk encompasses several - key ideas of the HDF4 and AIO file formats as well as - addressing some shortcomings therein. The new format is - more self-describing than the HDF4 format and is more - uniformly applied to data objects in the file.</p> - - <p>An HDF5 file appears to the user as a directed graph. - The nodes of this graph are the higher-level HDF5 objects - that are exposed by the HDF5 APIs:</p> - - <ul> - <li>Groups</li> - <li>Datasets</li> - <li>Committed (formerly Named) datatypes</li> - </ul> - - <p>At the lowest level, as information is actually written to the disk, - an HDF5 file is made up of the following objects:</p> - <ul> - <li>A superblock</li> - <li>B-tree nodes</li> - <li>Heap blocks</li> - <li>Object headers</li> - <li>Object data</li> - <li>Free space</li> - </ul> - - <p>The HDF5 Library uses these low-level objects to represent the - higher-level objects that are then presented to the user or - to applications through the APIs. For instance, a group is an - object header that contains a message that points to a local - heap (for storing the links to objects in the group) and to a - B-tree (which indexes the links). A dataset is an object header - that contains messages that describe datatype, dataspace, layout, - filters, external files, fill value, and other elements with the - layout message pointing to either a raw data chunk or to a - B-tree that points to raw data chunks.</p> +<table align="right" width="100"> + <tr> + <td> </td> + <td align="center"> + <hr /> <img src="FF-IH_FileGroup.gif" alt="HDF5 Groups" hspace="15" + vspace="15"> + </td> + <td> </td> + </tr> + <tr> + <td> </td> + <td align="center"><strong>Figure 1:</strong> Relationships among + the HDF5 root group, other groups, and objects + <hr /></td> + <td> </td> + </tr> + + <tr> + <td> </td> + <td align="center"><img src="FF-IH_FileObject.gif" + alt="HDF5 Objects" hspace="15" vspace="15"></td> + <td> </td> + </tr> + <tr> + <td> </td> + <td align="center"><strong>Figure 2:</strong> HDF5 objects -- + datasets, datatypes, or dataspaces + <hr /></td> + <td> </td> + </tr> +</table> + + +<p>The format of an HDF5 file on disk encompasses several key ideas + of the HDF4 and AIO file formats as well as addressing some + shortcomings therein. The new format is more self-describing than the + HDF4 format and is more uniformly applied to data objects in the file.</p> + +<p>An HDF5 file appears to the user as a directed graph. The nodes + of this graph are the higher-level HDF5 objects that are exposed by the + HDF5 APIs:</p> + +<ul> + <li>Groups</li> + <li>Datasets</li> + <li>Committed (formerly Named) datatypes</li> +</ul> + +<p>At the lowest level, as information is actually written to the + disk, an HDF5 file is made up of the following objects:</p> +<ul> + <li>A superblock</li> + <li>B-tree nodes</li> + <li>Heap blocks</li> + <li>Object headers</li> + <li>Object data</li> + <li>Free space</li> +</ul> + +<p>The HDF5 Library uses these low-level objects to represent the + higher-level objects that are then presented to the user or to + applications through the APIs. For instance, a group is an object + header that contains a message that points to a local heap (for storing + the links to objects in the group) and to a B-tree (which indexes the + links). A dataset is an object header that contains messages that + describe datatype, dataspace, layout, filters, external files, fill + value, and other elements with the layout message pointing to either a + raw data chunk or to a B-tree that points to raw data chunks.</p> <br /> <a name="ThisDocument"><h3>I.A. This Document</h3></a> - <p>This document describes the lower-level data objects; - the higher-level objects and their properties are described - in the <a href="UG/HDF5_User_Guide-Responsive HTML5/index.html"><cite>HDF5 User Guide</cite></a>.</p> - - <p>Three levels of information comprise the file format. - Level 0 contains basic information for identifying and - defining information about the file. Level 1 information contains - the information about the pieces of a file shared by many objects - in the file (such as a B-trees and heaps). Level 2 is the rest - of the file and contains all of the data objects, with each object - partitioned into header information, also known as - <em>metadata</em>, and data.</p> - - <p>The sizes of various fields in the following layout tables are - determined by looking at the number of columns the field spans - in the table. There are three exceptions: (1) The size may be - overridden by specifying a size in parentheses, (2) the size of - addresses is determined by the <em>Size of Offsets</em> field - in the superblock and is indicated in this document with a - superscripted ‘O’, and (3) the size of length fields is determined - by the <em>Size of Lengths</em> field in the superblock and is - indicated in this document with a superscripted ‘L’.</p> - - <p>Values for all fields in this document should be treated as unsigned - integers, unless otherwise noted in the description of a field. - Additionally, all metadata fields are stored in little-endian byte - order. - </p> - - <p>All checksums used in the format are computed with the - <a href="http://www.burtleburtle.net/bob/hash/doobs.html">Jenkins’ - lookup3</a> algorithm. - </p> - - <p>Whenever a bit flag or field is mentioned for an entry, bits are - numbered from the lowest bit position in the entry. - </p> - - <p>Various tables in this document aligned with “This space inserted - only to align table nicely”. These entries in the table are just - to make the table presentation nicer and do not represent any values - or padding in the file. - </p> +<p> + This document describes the lower-level data objects; the higher-level + objects and their properties are described in the <a + href="UG/HDF5_User_Guide-Responsive HTML5/index.html"><cite>HDF5 + User Guide</cite></a>. +</p> + +<p> + Three levels of information comprise the file format. Level 0 contains + basic information for identifying and defining information about the + file. Level 1 information contains the information about the pieces of + a file shared by many objects in the file (such as a B-trees and + heaps). Level 2 is the rest of the file and contains all of the data + objects, with each object partitioned into header information, also + known as <em>metadata</em>, and data. +</p> + +<p> + The sizes of various fields in the following layout tables are + determined by looking at the number of columns the field spans in the + table. There are three exceptions: (1) The size may be overridden by + specifying a size in parentheses, (2) the size of addresses is + determined by the <em>Size of Offsets</em> field in the superblock and + is indicated in this document with a superscripted ‘O’, and + (3) the size of length fields is determined by the <em>Size of + Lengths</em> field in the superblock and is indicated in this document with + a superscripted ‘L’. +</p> + +<p>Values for all fields in this document should be treated as + unsigned integers, unless otherwise noted in the description of a + field. Additionally, all metadata fields are stored in little-endian + byte order.</p> + +<p> + All checksums used in the format are computed with the <a + href="http://www.burtleburtle.net/bob/hash/doobs.html">Jenkins’ + lookup3</a> algorithm. +</p> + +<p>Whenever a bit flag or field is mentioned for an entry, bits are + numbered from the lowest bit position in the entry.</p> + +<p>Various tables in this document aligned with “This space + inserted only to align table nicely”. These entries in the table + are just to make the table presentation nicer and do not represent any + values or padding in the file.</p> <br /> <a name="ChangesForHdf5_1_10"><h3>I.B. Changes for HDF5 1.10</h3></a> - <p>As of October 2015, changes in the file format for HDF5 1.10 - have not yet been finalized.</p> +<p>As of October 2015, changes in the file format for HDF5 1.10 have + not yet been finalized.</p> <br /> <br /> <hr /> -<h2><a name="FileMetaData"> -II. Disk Format: Level 0 - File Metadata</a></h2> - -<br /> -<h3><a name="Superblock"> -II.A. Disk Format: Level 0A - Format Signature and Superblock</a></h3> - - <p>The superblock may begin at certain predefined offsets within - the HDF5 file, allowing a block of unspecified content for - users to place additional information at the beginning (and - end) of the HDF5 file without limiting the HDF5 Library’s - ability to manage the objects within the file itself. This - feature was designed to accommodate wrapping an HDF5 file in - another file format or adding descriptive information to an HDF5 - file without requiring the modification of the actual file’s - information. The superblock is located by searching for the - HDF5 format signature at byte offset 0, byte offset 512, and at - successive locations in the file, each a multiple of two of - the previous location; in other words, at these byte offsets: - 0, 512, 1024, 2048, and so on.</p> - - <p>The superblock is composed of the format signature, followed by a - superblock version number and information that is specific to each - version of the superblock. - Currently, there are three versions of the superblock format. - Version 0 is the default format, while version 1 is basically the same - as version 0 with additional information when a non-default B-tree ‘K’ - value is stored. Version 2 is the latest format, with some fields - eliminated or compressed and with superblock extension and checksum - support.</p> - - <p>Version 0 and 1 of the superblock are described below:</p> - - - <div align="center"> - <table class="format"> - <caption> - Superblock (Versions 0 and 1) - </caption> - - <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> - </tr> - - <tr> - <td colspan="4"><br />Format Signature (8 bytes)<br /><br /></td> - </tr> - - <tr> - <td>Version # of Superblock</td> - <td>Version # of File’s Free Space Storage</td> - <td>Version # of Root Group Symbol Table Entry</td> - <td>Reserved (zero)</td> - </tr> - - <tr> - <td>Version # of Shared Header Message Format</td> - <td>Size of Offsets</td> - <td>Size of Lengths</td> - <td>Reserved (zero)</td> - </tr> - - <tr> - <td colspan="2">Group Leaf Node K</td> - <td colspan="2">Group Internal Node K</td> - </tr> - - <tr> - <td colspan="4">File Consistency Flags</td> - </tr> - - <tr> - <td colspan="2" style="border:dotted;">Indexed Storage Internal Node K<sup>1</sup></td> - <td colspan="2" style="border:dotted;">Reserved (zero)<sup>1</sup></td> - </tr> - - <tr> - <td colspan="4"><br />Base Address<sup>O</sup><br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Address of File Free space Info<sup>O</sup><br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />End of File Address<sup>O</sup><br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Driver Information Block Address<sup>O</sup><br /><br /></td> - </tr> - - <tr> - <td colspan="4">Root Group Symbol Table Entry</td> - </tr> - </table> +<h2> + <a name="FileMetaData"> II. Disk Format: Level 0 - File Metadata</a> +</h2> + +<br /> +<h3> + <a name="Superblock"> II.A. Disk Format: Level 0A - Format + Signature and Superblock</a> +</h3> + +<p>The superblock may begin at certain predefined offsets within the + HDF5 file, allowing a block of unspecified content for users to place + additional information at the beginning (and end) of the HDF5 file + without limiting the HDF5 Library’s ability to manage the objects + within the file itself. This feature was designed to accommodate + wrapping an HDF5 file in another file format or adding descriptive + information to an HDF5 file without requiring the modification of the + actual file’s information. The superblock is located by searching + for the HDF5 format signature at byte offset 0, byte offset 512, and at + successive locations in the file, each a multiple of two of the + previous location; in other words, at these byte offsets: 0, 512, 1024, + 2048, and so on.</p> + +<p>The superblock is composed of the format signature, followed by a + superblock version number and information that is specific to each + version of the superblock. Currently, there are three versions of the + superblock format. Version 0 is the default format, while version 1 is + basically the same as version 0 with additional information when a + non-default B-tree ‘K’ value is stored. Version 2 is the + latest format, with some fields eliminated or compressed and with + superblock extension and checksum support.</p> + +<p>Version 0 and 1 of the superblock are described below:</p> + + +<div align="center"> + <table class="format"> + <caption>Superblock (Versions 0 and 1)</caption> - <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are - of the size specified in “Size of Offsets.”) - </td></tr> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + </tr> + <tr> - <td> </td> - <td> - (Items marked with a ‘1’ in the above table are - new in version 1 of the superblock) - </td></tr> - </table> - </div> + <td colspan="4"><br />Format Signature (8 bytes)<br /> + <br /></td> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Format Signature</p></td> - <td><p>This field contains a constant value and can be used to - quickly identify a file as being an HDF5 file. The - constant value is designed to allow easy identification of - an HDF5 file and to allow certain types of data corruption - to be detected. The file signature of an HDF5 file always - contains the following values:</p> - <center> - <table border align="center" cellpadding="4"> - <tr align="center"> - <td align="right">Decimal:</td> - <td width="8%">137</td> - <td width="8%">72</td> - <td width="8%">68</td> - <td width="8%">70</td> - <td width="8%">13</td> - <td width="8%">10</td> - <td width="8%">26</td> - <td width="8%">10</td> - </tr> - - <tr align="center"> - <td align="right">Hexadecimal:</td> - <td>89</td> - <td>48</td> - <td>44</td> - <td>46</td> - <td>0d</td> - <td>0a</td> - <td>1a</td> - <td>0a</td> - </tr> - - <tr align="center"> - <td align="right">ASCII C Notation:</td> - <td>\211</td> - <td>H</td> - <td>D</td> - <td>F</td> - <td>\r</td> - <td>\n</td> - <td>\032</td> - <td>\n</td> - </tr> - </table> - </center> - <p>This signature both identifies the file as an HDF5 file - and provides for immediate detection of common - file-transfer problems. The first two bytes distinguish - HDF5 files on systems that expect the first two bytes to - identify the file type uniquely. The first byte is - chosen as a non-ASCII value to reduce the probability - that a text file may be misrecognized as an HDF5 file; - also, it catches bad file transfers that clear bit - 7. Bytes two through four name the format. The CR-LF - sequence catches bad file transfers that alter newline - sequences. The control-Z character stops file display - under MS-DOS. The final line feed checks for the inverse - of the CR-LF translation problem. (This is a direct - descendent of the - <a href="http://www.libpng.org/pub/png/spec/iso/index-object.html#5PNG-file-signature">PNG</a> file - signature.)</p> - <p><em>This field is present in version 0+ of the superblock.</em> - </p></td> - </tr> - - <tr> - <td><p>Version Number of the Superblock</p></td> - <td><p>This value is used to determine the format of the - information in the superblock. When the format of the - information in the superblock is changed, the version number - is incremented to the next integer and can be used to - determine how the information in the superblock is - formatted.</p> - - <p>Values of 0, 1 and 2 are defined for this field. (The format - of version 2 is described below, not here) - </p> - - <p><em>This field is present in version 0+ of the superblock.</em> - </p> - </td> - </tr> - - <tr> - <td><p>Version Number of the File’s Free Space - Information</p></td> - <td> - <p>This value is used to determine the format of the - file’s free space information. - </p> - <p>The only value currently valid in this field is ‘0’, which - indicates that the file’s free space is as described - <a href="#FreeSpaceManager">below</a>. - </p> - - <p><em>This field is present in version 0 and 1 of the superblock.</em> - </p> - </td> - </tr> - - <tr> - <td><p>Version Number of the Root Group Symbol Table - Entry</p></td> - <td><p>This value is used to determine the format of the - information in the Root Group Symbol Table Entry. When the - format of the information in that field is changed, the - version number is incremented to the next integer and can be - used to determine how the information in the field - is formatted.</p> - <p>The only value currently valid in this field is ‘0’, - which indicates that the root group symbol table entry is - formatted as described <a href="#SymbolTableEntry">below</a>.</p> - <p><em>This field is present in version 0 and 1 of the - superblock.</em></p> - </td> - </tr> - - <tr> - <td><p>Version Number of the Shared Header Message Format</p></td> - <td><p>This value is used to determine the format of the - information in a shared object header message. Since the format - of the shared header messages differs from the other private - header messages, a version number is used to identify changes - in the format. - </p> - <p>The only value currently valid in this field is ‘0’, which - indicates that shared header messages are formatted as - described <a href="#ObjectHeaderMessages">below</a>. - </p> - - <p><em>This field is present in version 0 and 1 of the superblock.</em> - </p> - </td> - </tr> - - <tr> - <td><p>Size of Offsets</p></td> - <td><p>This value contains the number of bytes used to store - addresses in the file. The values for the addresses of - objects in the file are offsets relative to a base address, - usually the address of the superblock signature. This - allows a wrapper to be added after the file is created - without invalidating the internal offset locations. - </p> - - <p><em>This field is present in version 0+ of the superblock.</em> - </p> - </td> - </tr> - - <tr> - <td><p>Size of Lengths</p></td> - <td><p>This value contains the number of bytes used to store - the size of an object. - </p> - <p><em>This field is present in version 0+ of the superblock.</em> - </p> - </td> - </tr> - - <tr> - <td><p>Group Leaf Node K</p></td> - <td> - <p>Each leaf node of a group B-tree will have at - least this many entries but not more than twice this - many. If a group has a single leaf node then it - may have fewer entries. - </p> - <p>This value must be greater than zero. - </p> - <p>See the <a href="#Btrees">description</a> of B-trees below. - </p> - - <p><em>This field is present in version 0 and 1 of the superblock.</em> - </p> - </td> - </tr> - - <tr> - <td><p>Group Internal Node K</p></td> - <td> - <p>Each internal node of a group B-tree will have at - least this many entries but not more than twice this - many. If the group has only one internal - node then it might have fewer entries. - </p> - <p>This value must be greater than zero. - </p> - <p>See the <a href="#Btrees">description</a> of B-trees below. - </p> - - <p><em>This field is present in version 0 and 1 of the superblock.</em> - </p> - </td> - </tr> - - <tr> - <td><p>File Consistency Flags</p></td> - <td> - <p>This value contains flags to indicate information - about the consistency of the information contained - within the file. Currently, the following bit flags are - defined: - <ul> - <li>Bit 0 set indicates that the file is opened for - write-access.</li> - <li>Bit 1 set indicates that the file has - been verified for consistency and is guaranteed to be - consistent with the format defined in this document.</li> - <li>Bits 2-31 are reserved for future use.</li> - </ul> - Bit 0 should be - set as the first action when a file is opened for write - access and should be cleared only as the final action - when closing a file. Bit 1 should be cleared during - normal access to a file and only set after the file’s - consistency is guaranteed by the library or a - consistency utility. - </p> - - <p><em>This field is present in version 0+ of the superblock.</em> - </p> - </td> - </tr> - - <tr> - <td><p>Indexed Storage Internal Node K</p></td> - <td> - <p>Each internal node of an indexed storage B-tree will have at - least this many entries but not more than twice this - many. If the index storage B-tree has only one internal - node then it might have fewer entries. - </p> - <p>This value must be greater than zero. - </p> - <p>See the <a href="#Btrees">description</a> of B-trees below. - </p> - - <p><em>This field is present in version 1 of the superblock.</em> - </p> - </td> - </tr> - - <tr> - <td><p>Base Address</p></td> - <td> - <p>This is the absolute file address of the first byte of - the HDF5 data within the file. The library currently - constrains this value to be the absolute file address - of the superblock itself when creating new files; - future versions of the library may provide greater - flexibility. When opening an existing file and this address does - not match the offset of the superblock, the library assumes - that the entire contents of the HDF5 file have been adjusted in - the file and adjusts the base address and end of file address to - reflect their new positions in the file. Unless otherwise noted, - all other file addresses are relative to this base - address. - </p> - - <p><em>This field is present in version 0+ of the superblock.</em> - </p> - </td> - </tr> - - <tr> - <td><p>Address of Global Free-space Index</p></td> - <td> - <p>The file’s free space is not persistent for version 0 and 1 of - the superblock. - Currently this field always contains the - <a href="#UndefinedAddress">undefined address</a>. - </p> - - <p><em>This field is present in version 0 and 1 of the superblock.</em> - </p> - </td> - </tr> - - <tr> - <td><p>End of File Address</p></td> - <td> - <p>This is the absolute file address of the first byte past - the end of all HDF5 data. It is used to determine whether a - file has been accidentally truncated and as an address where - file data allocation can occur if space from the free list is - not used. - </p> - - <p><em>This field is present in version 0+ of the superblock.</em> - </p> - </td> - </tr> - - <tr> - <td><p>Driver Information Block Address</p></td> - <td> - <p>This is the relative file address of the file driver - information block which contains driver-specific - information needed to reopen the file. If there is no - driver information block then this entry should be the - <a href="#UndefinedAddress">undefined address</a>. - </p> - - <p><em>This field is present in version 0 and 1 of the superblock.</em> - </p> - </td> - </tr> - - <tr> - <td><p>Root Group Symbol Table Entry</p></td> - <td> - <p>This is the <a href="#SymbolTableEntry">symbol table entry</a> - of the root group, which serves as the entry point into - the group graph for the file. - </p> - - <p><em>This field is present in version 0 and 1 of the superblock.</em> - </p> - </td> + <tr> + <td>Version # of Superblock</td> + <td>Version # of File’s Free Space Storage</td> + <td>Version # of Root Group Symbol Table Entry</td> + <td>Reserved (zero)</td> </tr> - </table> - </div> - <br /> - <p>Version 2 of the superblock is described below:</p> - - <div align="center"> - <table class="format"> - <caption> - Superblock (Version 2) - </caption> - - <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> - </tr> - - <tr> - <td colspan="4"><br />Format Signature (8 bytes)<br /><br /></td> - </tr> - - <tr> - <td>Version # of Superblock</td> - <td>Size of Offsets</td> - <td>Size of Lengths</td> - <td>File Consistency Flags</td> - </tr> - - <tr> - <td colspan="4"><br />Base Address<sup>O</sup><br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Superblock Extension Address<sup>O</sup><br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />End of File Address<sup>O</sup><br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Root Group Object Header Address<sup>O</sup><br /><br /></td> - </tr> - - <tr> - <td colspan="4">Superblock Checksum</td> - </tr> - </table> + <tr> + <td>Version # of Shared Header Message Format</td> + <td>Size of Offsets</td> + <td>Size of Lengths</td> + <td>Reserved (zero)</td> + </tr> - <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are - of the size specified in “Size of Offsets.”) - </td></tr> - </table> + <td colspan="2">Group Leaf Node K</td> + <td colspan="2">Group Internal Node K</td> + </tr> - </div> + <tr> + <td colspan="4">File Consistency Flags</td> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Format Signature</p></td> - <td> - <p>This field is the same as described for versions 0 and 1 of the - superblock. - </p></td> - </tr> - - <tr> - <td><p>Version Number of the Superblock</p></td> - <td> - <p>This field has a value of 2 and has the same meaning as for - versions 0 and 1. - </p> - </td> - </tr> - - <tr> - <td><p>Size of Offsets</p></td> - <td> - <p>This field is the same as described for versions 0 and 1 of the - superblock. - </p> - </td> - </tr> - - <tr> - <td><p>Size of Lengths</p></td> - <td> - <p>This field is the same as described for versions 0 and 1 of the - superblock. - </p> - </td> - </tr> - - <tr> - <td><p>File Consistency Flags</p></td> - <td> - <p>This field is the same as described for versions 0 and 1 except - that it is smaller (the number of reserved bits has been reduced - from 30 to 6). - </p> - </td> - </tr> - - <tr> - <td><p>Base Address</p></td> - <td> - <p>This field is the same as described for versions 0 and 1 of the - superblock. - </p> - </td> - </tr> - - <tr> - <td><p>Superblock Extension Address</p></td> - <td> - <p>The field is the address of the object header for the - <a href="#SuperblockExt">superblock extension</a>. - If there is no extension then this entry should be the - <a href="#UndefinedAddress">undefined address</a>. - </p> - </td> - </tr> - - <tr> - <td><p>End of File Address</p></td> - <td> - <p>This field is the same as described for versions 0 and 1 of the - superblock. - </p> - </td> - </tr> - - <tr> - <td><p>Root Group Object Header Address</p></td> - <td> - <p>This is the address of - the <a href="#DataObject">root group object header</a>, - which serves as the entry point into the group graph for the file. - </p> - </td> - </tr> - - <tr> - <td><p>Superblock Checksum</p></td> - <td> - <p>The checksum for the superblock. - </p> - </td> + <tr> + <td colspan="2" style="border: dotted;">Indexed Storage Internal + Node K<sup>1</sup> + </td> + <td colspan="2" style="border: dotted;">Reserved (zero)<sup>1</sup></td> </tr> - </table> - </div> + <tr> + <td colspan="4"><br />Base Address<sup>O</sup><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Address of File Free space Info<sup>O</sup><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />End of File Address<sup>O</sup><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Driver Information Block Address<sup>O</sup><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4">Root Group Symbol Table Entry</td> + </tr> + </table> + + <table class="note"> + <tr> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets.”)</td> + </tr> + <tr> + <td> </td> + <td>(Items marked with a ‘1’ in the above table are + new in version 1 of the superblock)</td> + </tr> + </table> +</div> <br /> -<h3><a name="DriverInfo"> -II.B. Disk Format: Level 0B - File Driver Info</a></h3> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Format Signature</p></td> + <td><p>This field contains a constant value and can be used + to quickly identify a file as being an HDF5 file. The constant + value is designed to allow easy identification of an HDF5 file and + to allow certain types of data corruption to be detected. The file + signature of an HDF5 file always contains the following values:</p> + <center> + <table border align="center" cellpadding="4"> + <tr align="center"> + <td align="right">Decimal:</td> + <td width="8%">137</td> + <td width="8%">72</td> + <td width="8%">68</td> + <td width="8%">70</td> + <td width="8%">13</td> + <td width="8%">10</td> + <td width="8%">26</td> + <td width="8%">10</td> + </tr> + + <tr align="center"> + <td align="right">Hexadecimal:</td> + <td>89</td> + <td>48</td> + <td>44</td> + <td>46</td> + <td>0d</td> + <td>0a</td> + <td>1a</td> + <td>0a</td> + </tr> - <p>The <b>driver information block</b> is an optional region of the - file which contains information needed by the file driver - to reopen a file. The format is described below:</p> + <tr align="center"> + <td align="right">ASCII C Notation:</td> + <td>\211</td> + <td>H</td> + <td>D</td> + <td>F</td> + <td>\r</td> + <td>\n</td> + <td>\032</td> + <td>\n</td> + </tr> + </table> + </center> + <p> + This signature both identifies the file as an HDF5 file and + provides for immediate detection of common file-transfer problems. + The first two bytes distinguish HDF5 files on systems that expect + the first two bytes to identify the file type uniquely. The first + byte is chosen as a non-ASCII value to reduce the probability that + a text file may be misrecognized as an HDF5 file; also, it catches + bad file transfers that clear bit 7. Bytes two through four name + the format. The CR-LF sequence catches bad file transfers that + alter newline sequences. The control-Z character stops file display + under MS-DOS. The final line feed checks for the inverse of the + CR-LF translation problem. (This is a direct descendent of the <a + href="http://www.libpng.org/pub/png/spec/iso/index-object.html#5PNG-file-signature">PNG</a> + file signature.) + </p> + <p> + <em>This field is present in version 0+ of the superblock.</em> + </p></td> + </tr> + <tr> + <td><p>Version Number of the Superblock</p></td> + <td><p>This value is used to determine the format of the + information in the superblock. When the format of the information + in the superblock is changed, the version number is incremented to + the next integer and can be used to determine how the information + in the superblock is formatted.</p> - <div align="center"> - <table class="format"> - <caption> - Driver Information Block - </caption> + <p>Values of 0, 1 and 2 are defined for this field. (The format + of version 2 is described below, not here)</p> + + <p> + <em>This field is present in version 0+ of the superblock.</em> + </p></td> + </tr> + + <tr> + <td><p>Version Number of the File’s Free Space + Information</p></td> + <td> + <p>This value is used to determine the format of the + file’s free space information.</p> + <p> + The only value currently valid in this field is ‘0’, + which indicates that the file’s free space is as described <a + href="#FreeSpaceManager">below</a>. + </p> + + <p> + <em>This field is present in version 0 and 1 of the + superblock.</em> + </p> + </td> + </tr> + + <tr> + <td><p>Version Number of the Root Group Symbol Table Entry</p></td> + <td><p>This value is used to determine the format of the + information in the Root Group Symbol Table Entry. When the format + of the information in that field is changed, the version number is + incremented to the next integer and can be used to determine how + the information in the field is formatted.</p> + <p> + The only value currently valid in this field is ‘0’, + which indicates that the root group symbol table entry is formatted + as described <a href="#SymbolTableEntry">below</a>. + </p> + <p> + <em>This field is present in version 0 and 1 of the + superblock.</em> + </p></td> + </tr> + + <tr> + <td><p>Version Number of the Shared Header Message Format</p></td> + <td><p>This value is used to determine the format of the + information in a shared object header message. Since the format of + the shared header messages differs from the other private header + messages, a version number is used to identify changes in the + format.</p> + <p> + The only value currently valid in this field is ‘0’, + which indicates that shared header messages are formatted as + described <a href="#ObjectHeaderMessages">below</a>. + </p> + + <p> + <em>This field is present in version 0 and 1 of the + superblock.</em> + </p></td> + </tr> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> - </tr> + <td><p>Size of Offsets</p></td> + <td><p>This value contains the number of bytes used to store + addresses in the file. The values for the addresses of objects in + the file are offsets relative to a base address, usually the + address of the superblock signature. This allows a wrapper to be + added after the file is created without invalidating the internal + offset locations.</p> + + <p> + <em>This field is present in version 0+ of the superblock.</em> + </p></td> + </tr> <tr> - <td>Version</td> - <td colspan="3">Reserved</td> + <td><p>Size of Lengths</p></td> + <td><p>This value contains the number of bytes used to store + the size of an object.</p> + <p> + <em>This field is present in version 0+ of the superblock.</em> + </p></td> </tr> <tr> - <td colspan="4">Driver Information Size</td> + <td><p>Group Leaf Node K</p></td> + <td> + <p>Each leaf node of a group B-tree will have at least this many + entries but not more than twice this many. If a group has a single + leaf node then it may have fewer entries.</p> + <p>This value must be greater than zero.</p> + <p> + See the <a href="#Btrees">description</a> of B-trees below. + </p> + + <p> + <em>This field is present in version 0 and 1 of the + superblock.</em> + </p> + </td> </tr> <tr> - <td colspan="4"><br />Driver Identification (8 bytes)<br /><br /></td> + <td><p>Group Internal Node K</p></td> + <td> + <p>Each internal node of a group B-tree will have at least this + many entries but not more than twice this many. If the group has + only one internal node then it might have fewer entries.</p> + <p>This value must be greater than zero.</p> + <p> + See the <a href="#Btrees">description</a> of B-trees below. + </p> + + <p> + <em>This field is present in version 0 and 1 of the + superblock.</em> + </p> + </td> </tr> <tr> - <td colspan="4"><br /><br />Driver Information (<em>variable size</em>)<br /><br /><br /></td> + <td><p>File Consistency Flags</p></td> + <td> + <p>This value contains flags to indicate information about the + consistency of the information contained within the file. + Currently, the following bit flags are defined:</p> + <ul> + <li>Bit 0 set indicates that the file is opened for + write-access.</li> + <li>Bit 1 set indicates that the file has been verified for + consistency and is guaranteed to be consistent with the format + defined in this document.</li> + <li>Bits 2-31 are reserved for future use.</li> + </ul> Bit 0 should be set as the first action when a file is opened for + write access and should be cleared only as the final action when + closing a file. Bit 1 should be cleared during normal access to a + file and only set after the file’s consistency is guaranteed + by the library or a consistency utility. + <p></p> + + <p> + <em>This field is present in version 0+ of the superblock.</em> + </p> + </td> </tr> - </table> - </div> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> + <tr> + <td><p>Indexed Storage Internal Node K</p></td> + <td> + <p>Each internal node of an indexed storage B-tree will have at + least this many entries but not more than twice this many. If the + index storage B-tree has only one internal node then it might have + fewer entries.</p> + <p>This value must be greater than zero.</p> + <p> + See the <a href="#Btrees">description</a> of B-trees below. + </p> + + <p> + <em>This field is present in version 1 of the superblock.</em> + </p> + </td> + </tr> + + <tr> + <td><p>Base Address</p></td> + <td> + <p>This is the absolute file address of the first byte of the + HDF5 data within the file. The library currently constrains this + value to be the absolute file address of the superblock itself when + creating new files; future versions of the library may provide + greater flexibility. When opening an existing file and this address + does not match the offset of the superblock, the library assumes + that the entire contents of the HDF5 file have been adjusted in the + file and adjusts the base address and end of file address to + reflect their new positions in the file. Unless otherwise noted, + all other file addresses are relative to this base address.</p> + + <p> + <em>This field is present in version 0+ of the superblock.</em> + </p> + </td> + </tr> + + <tr> + <td><p>Address of Global Free-space Index</p></td> + <td> + <p> + The file’s free space is not persistent for version 0 and 1 + of the superblock. Currently this field always contains the <a + href="#UndefinedAddress">undefined address</a>. + </p> + + <p> + <em>This field is present in version 0 and 1 of the + superblock.</em> + </p> + </td> + </tr> + + <tr> + <td><p>End of File Address</p></td> + <td> + <p>This is the absolute file address of the first byte past the + end of all HDF5 data. It is used to determine whether a file has + been accidentally truncated and as an address where file data + allocation can occur if space from the free list is not used.</p> + + <p> + <em>This field is present in version 0+ of the superblock.</em> + </p> + </td> + </tr> + + <tr> + <td><p>Driver Information Block Address</p></td> + <td> + <p> + This is the relative file address of the file driver information + block which contains driver-specific information needed to reopen + the file. If there is no driver information block then this entry + should be the <a href="#UndefinedAddress">undefined address</a>. + </p> + + <p> + <em>This field is present in version 0 and 1 of the + superblock.</em> + </p> + </td> + </tr> + + <tr> + <td><p>Root Group Symbol Table Entry</p></td> + <td> + <p> + This is the <a href="#SymbolTableEntry">symbol table entry</a> of + the root group, which serves as the entry point into the group + graph for the file. + </p> + + <p> + <em>This field is present in version 0 and 1 of the + superblock.</em> + </p> + </td> + </tr> + </table> +</div> + +<br /> +<p>Version 2 of the superblock is described below:</p> + +<div align="center"> + <table class="format"> + <caption>Superblock (Version 2)</caption> + + <tr> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td><p>Version</p></td> - <td> - <p>The version number of the Driver Information Block. - This document describes version 0. - </p> - </td> + <td colspan="4"><br />Format Signature (8 bytes)<br /> + <br /></td> </tr> <tr> - <td><p>Driver Information Size</p></td> - <td> - <p>The size in bytes of the <em>Driver Information</em> field. - </p> - </td> + <td>Version # of Superblock</td> + <td>Size of Offsets</td> + <td>Size of Lengths</td> + <td>File Consistency Flags</td> </tr> <tr> - <td><p>Driver Identification</p></td> - <td> - <p>This is an eight-byte ASCII string without null - termination which identifies the driver and/or version number - of the Driver Information Block. The predefined driver encoded - in this field by the HDF5 Library is identified by the - letters <code>NCSA</code> followed by the first four characters of - the driver name. If the Driver Information block is not - the original version then the last letter(s) of the - identification will be replaced by a version number in - ASCII, starting with 0. - </p> - <p> - Identification for user-defined drivers is also eight-byte long. - It can be arbitrary but should be unique to avoid - the four character prefix “NCSA”. - </p> - </td> + <td colspan="4"><br />Base Address<sup>O</sup><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Superblock Extension Address<sup>O</sup><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />End of File Address<sup>O</sup><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Root Group Object Header Address<sup>O</sup><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4">Superblock Checksum</td> + </tr> + </table> + + <table class="note"> + <tr> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets.”)</td> + </tr> + </table> + +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Format Signature</p></td> + <td> + <p>This field is the same as described for versions 0 and 1 of + the superblock.</p> + </td> + </tr> + + <tr> + <td><p>Version Number of the Superblock</p></td> + <td> + <p>This field has a value of 2 and has the same meaning as for + versions 0 and 1.</p> + </td> + </tr> + + <tr> + <td><p>Size of Offsets</p></td> + <td> + <p>This field is the same as described for versions 0 and 1 of + the superblock.</p> + </td> + </tr> + + <tr> + <td><p>Size of Lengths</p></td> + <td> + <p>This field is the same as described for versions 0 and 1 of + the superblock.</p> + </td> + </tr> + + <tr> + <td><p>File Consistency Flags</p></td> + <td> + <p>This field is the same as described for versions 0 and 1 + except that it is smaller (the number of reserved bits has been + reduced from 30 to 6).</p> + </td> + </tr> + + <tr> + <td><p>Base Address</p></td> + <td> + <p>This field is the same as described for versions 0 and 1 of + the superblock.</p> + </td> + </tr> + + <tr> + <td><p>Superblock Extension Address</p></td> + <td> + <p> + The field is the address of the object header for the <a + href="#SuperblockExt">superblock extension</a>. If there is no + extension then this entry should be the <a href="#UndefinedAddress">undefined + address</a>. + </p> + </td> + </tr> + + <tr> + <td><p>End of File Address</p></td> + <td> + <p>This field is the same as described for versions 0 and 1 of + the superblock.</p> + </td> + </tr> + + <tr> + <td><p>Root Group Object Header Address</p></td> + <td> + <p> + This is the address of the <a href="#DataObject">root group + object header</a>, which serves as the entry point into the group + graph for the file. + </p> + </td> + </tr> + + <tr> + <td><p>Superblock Checksum</p></td> + <td> + <p>The checksum for the superblock.</p> + </td> + </tr> + + </table> +</div> + +<br /> +<h3> + <a name="DriverInfo"> II.B. Disk Format: Level 0B - File Driver + Info</a> +</h3> + +<p> + The <b>driver information block</b> is an optional region of the file + which contains information needed by the file driver to reopen a file. + The format is described below: +</p> + + +<div align="center"> + <table class="format"> + <caption>Driver Information Block</caption> + + <tr> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + </tr> + + <tr> + <td>Version</td> + <td colspan="3">Reserved</td> + </tr> + + <tr> + <td colspan="4">Driver Information Size</td> + </tr> + + <tr> + <td colspan="4"><br />Driver Identification (8 bytes)<br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br /> + <br />Driver Information (<em>variable size</em>)<br /> + <br /> + <br /></td> + </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Version</p></td> + <td> + <p>The version number of the Driver Information Block. This + document describes version 0.</p> + </td> + </tr> + + <tr> + <td><p>Driver Information Size</p></td> + <td> + <p> + The size in bytes of the <em>Driver Information</em> field. + </p> + </td> + </tr> + + <tr> + <td><p>Driver Identification</p></td> + <td> + <p> + This is an eight-byte ASCII string without null termination which + identifies the driver and/or version number of the Driver + Information Block. The predefined driver encoded in this field by + the HDF5 Library is identified by the letters + <code>NCSA</code> + followed by the first four characters of the driver name. If the + Driver Information block is not the original version then the last + letter(s) of the identification will be replaced by a version + number in ASCII, starting with 0. + </p> + <p>Identification for user-defined drivers is also eight-byte + long. It can be arbitrary but should be unique to avoid the four + character prefix “NCSA”.</p> + </td> </tr> <tr valign="top"> - <td><p>Driver Information</p></td> - <td>Driver information is stored in a format defined by the - file driver (see description below).</td> + <td><p>Driver Information</p></td> + <td>Driver information is stored in a format defined by the file + driver (see description below).</td> </tr> - </table> - </div> + </table> +</div> + +<br /> The two drivers encoded in the +<em>Driver Identification</em> field are as follows: +<ul> + <li>Multi driver: + <p>The identifier for this driver is “NCSAmulti”. This + driver provides a mechanism for segregating raw data and different + types of metadata into multiple files. These files are viewed by the + library as a single virtual HDF5 file with a single file address. A + maximum of 6 files will be created for the following data: + superblock, B-tree, raw data, global heap, local heap, and object + header. More than one type of data can be written to the same file.</p> + </li> + <li>Family driver + <p>The identifier for this driver is “NCSAfami” and is + encoded in this field for library version 1.8 and after. This driver + is designed for systems that do not support files larger than 2 + gigabytes by splitting the HDF5 file address space across several + smaller files. It does nothing to segregate metadata and raw data; + they are mixed in the address space just as they would be in a single + contiguous file.</p> + </li> +</ul> +<p> + The format of the <em>Driver Information</em> field for the above two + drivers are described below: +</p> - <br /> - The two drivers encoded in the <em>Driver Identification</em> field are as follows: - <ul> - <li> - Multi driver: - <p> - The identifier for this driver is “NCSAmulti”. - This driver provides a mechanism for segregating raw data and different types of metadata - into multiple files. - These files are viewed by the library as a single virtual HDF5 file with a single file address. - A maximum of 6 files will be created for the following data: - superblock, B-tree, raw data, global heap, local heap, and object header. - More than one type of data can be written to the same file. - </p></li> - <li> - Family driver - <p> - The identifier for this driver is “NCSAfami” and is encoded in this field for library version 1.8 and after. - This driver is designed for systems that do not support files larger than 2 gigabytes - by splitting the HDF5 file address space across several smaller files. - It does nothing to segregate metadata and raw data; - they are mixed in the address space just as they would be in a single contiguous file. - </p></li> - </ul> - <p>The format of the <em>Driver Information</em> field for the - above two drivers are described below:</p> - - <div align="center"> - <table class="format"> - <caption> - Multi Driver Information - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td>Member Mapping</td> - <td>Member Mapping</td> - <td>Member Mapping</td> - <td>Member Mapping</td> - </tr> - - <tr> - <td>Member Mapping</td> - <td>Member Mapping</td> - <td>Reserved</td> - <td>Reserved</td> - </tr> - - <tr> - <td colspan="4"><br />Address of Member File 1<br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />End of Address for Member File 1<br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Address of Member File 2<br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />End of Address for Member File 2<br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />... ...<br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Address of Member File N<br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />End of Address for Member File N<br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Name of Member File 1 <em>(variable size)</em><br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Name of Member File 2 <em>(variable size)</em><br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />... ...<br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Name of Member File N <em>(variable size)</em><br /><br /></td> - </tr> +<div align="center"> + <table class="format"> + <caption>Multi Driver Information</caption> - </table> - </div> + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> + <tr> + <td>Member Mapping</td> + <td>Member Mapping</td> + <td>Member Mapping</td> + <td>Member Mapping</td> + </tr> + + <tr> + <td>Member Mapping</td> + <td>Member Mapping</td> + <td>Reserved</td> + <td>Reserved</td> + </tr> + + <tr> + <td colspan="4"><br />Address of Member File 1<br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />End of Address for Member File 1<br /> + <br /></td> + </tr> - <tr> - <td><p>Member Mapping</p></td> - <td><p>These fields are integer values from 1 to 6 - indicating how the data can be mapped to or merged with another type of - data. - <table class="list"> + <tr> + <td colspan="4"><br />Address of Member File 2<br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />End of Address for Member File 2<br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />... ...<br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Address of Member File N<br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />End of Address for Member File N<br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Name of Member File 1 <em>(variable + size)</em><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Name of Member File 2 <em>(variable + size)</em><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />... ...<br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Name of Member File N <em>(variable + size)</em><br /> + <br /></td> + </tr> + + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Member Mapping</p></td> + <td><p>These fields are integer values from 1 to 6 + indicating how the data can be mapped to or merged with another + type of data.</p> + <table class="list"> <tr> - <th width="20%" align="center">Member Mapping</th> - <th width="80%" align="left">Description</th> + <th width="20%" align="center">Member Mapping</th> + <th width="80%" align="left">Description</th> </tr> <tr> <td align="center">1</td> @@ -1261,4097 +1399,4089 @@ II.B. Disk Format: Level 0B - File Driver Info</a></h3> <td align="center">6</td> <td>The object header data.</td> </tr> - </table></p> - <p>For example, if the third field has the value 3 and all the rest have the - value 1, it means there are two files: one for raw data, and one for superblock, - B-tree, global heap, local heap, and object header.</p> - </td> - </tr> - - <tr> - <td><p>Reserved</p></td> - <td><p>These fields are reserved and should always be zero.</p></td> - </tr> - - <tr> - <td><p>Address of Member File N</p></td> - <td><p>This field Specifies the virtual address at which the member file starts.</p> - <p>N is the number of member files.</p> - </td> - </tr> - - <tr> - <td><p>End of Address for Member File N</p></td> - <td><p>This field is the end of the allocated address for the member file. - </p></td> - </tr> - - <tr> - <td><p>Name of Member File N</p></td> - <td><p>This field is the null-terminated name of the member file and - its length should be multiples of 8 bytes. - Additional bytes will be padded with <em>NULL</em>s. The default naming - convention is <em>%s-X.h5</em>, where <em>X</em> is one of the letters - <em>s</em> (for superblock), <em>b</em> (for B-tree), <em>r</em> (for raw data), - <em>g</em> (for global heap), <em>l</em> (for local heap), and <em>o</em> (for - object header). The name of the whole HDF5 file will substitute the <em>%s</em> - in the string. - </p> - </td> - </tr> - </table> - </div> + </table> + <p></p> + <p>For example, if the third field has the value 3 and all the + rest have the value 1, it means there are two files: one for raw + data, and one for superblock, B-tree, global heap, local heap, and + object header.</p></td> + </tr> - <br /> - <div align="center"> - <table class="format"> - <caption> - Family Driver Information - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td colspan="8"><br />Size of Member File<br /><br /></td> - </tr> + <tr> + <td><p>Reserved</p></td> + <td><p>These fields are reserved and should always be zero.</p></td> + </tr> - </table> - </div> + <tr> + <td><p>Address of Member File N</p></td> + <td><p>This field Specifies the virtual address at which the + member file starts.</p> + <p>N is the number of member files.</p></td> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Size of Member File</p></td> - <td><p>This field is the size of the member file in the family of files.</p></td> - </tr> - </table> - </div> + <tr> + <td><p>End of Address for Member File N</p></td> + <td><p>This field is the end of the allocated address for + the member file.</p></td> + </tr> + + <tr> + <td><p>Name of Member File N</p></td> + <td><p> + This field is the null-terminated name of the member file and its + length should be multiples of 8 bytes. Additional bytes will be + padded with <em>NULL</em>s. The default naming convention is <em>%s-X.h5</em>, + where <em>X</em> is one of the letters <em>s</em> (for superblock), + <em>b</em> (for B-tree), <em>r</em> (for raw data), <em>g</em> (for + global heap), <em>l</em> (for local heap), and <em>o</em> (for + object header). The name of the whole HDF5 file will substitute the + <em>%s</em> in the string. + </p></td> + </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="format"> + <caption>Family Driver Information</caption> + + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr> + <td colspan="8"><br />Size of Member File<br /> + <br /></td> + </tr> + + </table> +</div> <br /> -<h3><a name="SuperblockExt"> -II.C. Disk Format: Level 0C - Superblock Extension</a></h3> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Size of Member File</p></td> + <td><p>This field is the size of the member file in the + family of files.</p></td> + </tr> + </table> +</div> - <p>The <em>superblock extension</em> is used to store superblock metadata - which is either optional, or added after the version of the superblock - was defined. Superblock extensions may only exist when version 2+ of - superblock is used. A superblock extension is an object header which may - hold the following messages:</p> - <ul> - <li> - <a href="#SOHMTableMessage">Shared Message Table message</a> containing - information to locate the master table of shared object header message - indices.</li> - <li> - <a href="#BtreeKValuesMessage">B-tree ‘K’ Values message</a> containing - non-default B-tree ‘K’ values.</li> - <li> - <a href="#DrvInfoMessage">Driver Info message</a> containing information - needed by the file driver in order to reopen a file. - See also the - <a href="#DriverInfo">“Disk Format: Level 0B - File Driver - Info”</a> section above.</li> - <li> - <a href="#FsinfoMessage">File Space Info message</a> containing - information about file space handling in the file.</li> - </ul> +<br /> +<h3> + <a name="SuperblockExt"> II.C. Disk Format: Level 0C - Superblock + Extension</a> +</h3> + +<p> + The <em>superblock extension</em> is used to store superblock metadata + which is either optional, or added after the version of the superblock + was defined. Superblock extensions may only exist when version 2+ of + superblock is used. A superblock extension is an object header which + may hold the following messages: +</p> +<ul> + <li><a href="#SOHMTableMessage">Shared Message Table message</a> + containing information to locate the master table of shared object + header message indices.</li> + <li><a href="#BtreeKValuesMessage">B-tree ‘K’ + Values message</a> containing non-default B-tree ‘K’ values.</li> + <li><a href="#DrvInfoMessage">Driver Info message</a> containing + information needed by the file driver in order to reopen a file. See + also the <a href="#DriverInfo">“Disk Format: Level 0B - File + Driver Info”</a> section above.</li> + <li><a href="#FsinfoMessage">File Space Info message</a> + containing information about file space handling in the file.</li> +</ul> <br /> <br /> <hr /> -<h2><a name="FileInfra"> -III. Disk Format: Level 1 - File Infrastructure</a></h2> - -<br /> -<h3><a name="Btrees"> -III.A. Disk Format: Level 1A - B-trees and B-tree Nodes</a></h3> - - <p>B-trees allow flexible storage for objects which tend to grow - in ways that cause the object to be stored discontiguously. B-trees - are described in various algorithms books including “Introduction to - Algorithms” by Thomas H. Cormen, Charles E. Leiserson, and Ronald - L. Rivest. B-trees are used in several places in the HDF5 file format, - when an index is needed for another data structure.</p> - - <p>The version 1 B-tree structure described below is the original index - structure, but are limited by some bugs in our implementation (mainly in - how they handle deleting records). The version 1 B-trees are being phased - out in favor of the version 2 B-trees described below, although both - types of structures may be found in the same file, depending on - application settings when creating the file.</p> - -<br /> -<h4><a name="V1Btrees"> -III.A.1. Disk Format: Level 1A1 - Version 1 B-trees (B-link Trees)</a></h4> - - <p>Version 1 B-trees in HDF5 files an implementation of the B-link tree, - in which the sibling nodes at a particular level in the tree are stored - in a doubly-linked list, is described in the “Efficient Locking for - Concurrent Operations on B-trees” paper by Phillip Lehman and S. Bing Yao - as published in the <cite>ACM Transactions on Database Systems</cite>, - Vol. 6, No. 4, December 1981.</p> - - <p>The B-link trees implemented by the file format contain one more - key than the number of children. In other words, each child - pointer out of a B-tree node has a left key and a right key. - The pointers out of internal nodes point to sub-trees while - the pointers out of leaf nodes point to symbol nodes and - raw data chunks. - Aside from that difference, internal nodes and leaf nodes - are identical.</p> - - <div align="center"> - <table class="format"> - <caption> - B-link Tree Nodes - </caption> +<h2> + <a name="FileInfra"> III. Disk Format: Level 1 - File + Infrastructure</a> +</h2> + +<br /> +<h3> + <a name="Btrees"> III.A. Disk Format: Level 1A - B-trees and B-tree + Nodes</a> +</h3> + +<p>B-trees allow flexible storage for objects which tend to grow in + ways that cause the object to be stored discontiguously. B-trees are + described in various algorithms books including “Introduction to + Algorithms” by Thomas H. Cormen, Charles E. Leiserson, and Ronald + L. Rivest. B-trees are used in several places in the HDF5 file format, + when an index is needed for another data structure.</p> + +<p>The version 1 B-tree structure described below is the original + index structure, but are limited by some bugs in our implementation + (mainly in how they handle deleting records). The version 1 B-trees are + being phased out in favor of the version 2 B-trees described below, + although both types of structures may be found in the same file, + depending on application settings when creating the file.</p> + +<br /> +<h4> + <a name="V1Btrees"> III.A.1. Disk Format: Level 1A1 - Version 1 + B-trees (B-link Trees)</a> +</h4> + +<p> + Version 1 B-trees in HDF5 files an implementation of the B-link tree, + in which the sibling nodes at a particular level in the tree are stored + in a doubly-linked list, is described in the “Efficient Locking + for Concurrent Operations on B-trees” paper by Phillip Lehman and + S. Bing Yao as published in the <cite>ACM Transactions on + Database Systems</cite>, Vol. 6, No. 4, December 1981. +</p> + +<p>The B-link trees implemented by the file format contain one more + key than the number of children. In other words, each child pointer out + of a B-tree node has a left key and a right key. The pointers out of + internal nodes point to sub-trees while the pointers out of leaf nodes + point to symbol nodes and raw data chunks. Aside from that difference, + internal nodes and leaf nodes are identical.</p> + +<div align="center"> + <table class="format"> + <caption>B-link Tree Nodes</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td colspan="4">Signature</td> + <td colspan="4">Signature</td> </tr> <tr> - <td>Node Type</td> - <td>Node Level</td> - <td colspan="2">Entries Used</td> + <td>Node Type</td> + <td>Node Level</td> + <td colspan="2">Entries Used</td> </tr> <tr> - <td colspan="4"><br />Address of Left Sibling<sup>O</sup><br /><br /></td> + <td colspan="4"><br />Address of Left Sibling<sup>O</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Address of Right Sibling<sup>O</sup><br /><br /></td> + <td colspan="4"><br />Address of Right Sibling<sup>O</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4">Key 0 (variable size)</td> + <td colspan="4">Key 0 (variable size)</td> </tr> <tr> - <td colspan="4"><br />Address of Child 0<sup>O</sup><br /><br /></td> + <td colspan="4"><br />Address of Child 0<sup>O</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4">Key 1 (variable size)</td> + <td colspan="4">Key 1 (variable size)</td> </tr> <tr> - <td colspan="4"><br />Address of Child 1<sup>O</sup><br /><br /></td> + <td colspan="4"><br />Address of Child 1<sup>O</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4">...</td> + <td colspan="4">...</td> </tr> <tr> - <td colspan="4">Key 2<em>K</em> (variable size)</td> + <td colspan="4">Key 2<em>K</em> (variable size) + </td> </tr> <tr> - <td colspan="4"><br />Address of Child 2<em>K</em><sup>O</sup><br /><br /></td> + <td colspan="4"><br />Address of Child 2<em>K</em><sup>O</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4">Key 2<em>K</em>+1 (variable size)</td> + <td colspan="4">Key 2<em>K</em>+1 (variable size) + </td> </tr> - </table> + </table> - <table class="note"> + <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> - </table> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> + </table> - </div> +</div> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Signature</p></td> - <td> - <p>The ASCII character string “<code>TREE</code>” is - used to indicate the - beginning of a B-link tree node. This gives file - consistency checking utilities a better chance of - reconstructing a damaged file. - </p> - </td> - </tr> - - <tr> - <td><p>Node Type</p></td> - <td> - <p>Each B-link tree points to a particular type of data. - This field indicates the type of data as well as - implying the maximum degree <em>K</em> of the tree and - the size of each Key field. - - - <table class="list"> - <tr> - <th width="20%" align="center">Node Type</th> - <th width="80%" align="left">Description</th> - </tr> - <tr> - <td align="center">0</td> - <td>This tree points to group nodes.</td> - </tr> - <tr> - <td align="center">1</td> - <td>This tree points to raw data chunk nodes.</td> - </tr> - </table></p> - </td> - </tr> - - <tr> - <td><p>Node Level</p></td> - <td> - <p>The node level indicates the level at which this node - appears in the tree (leaf nodes are at level zero). Not - only does the level indicate whether child pointers - point to sub-trees or to data, but it can also be used - to help file consistency checking utilities reconstruct - damaged trees. - </p> - </td> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Signature</p></td> + <td> + <p> + The ASCII character string “ + <code>TREE</code> + ” is used to indicate the beginning of a B-link tree node. + This gives file consistency checking utilities a better chance of + reconstructing a damaged file. + </p> + </td> + </tr> + + <tr> + <td><p>Node Type</p></td> + <td> + <p> + Each B-link tree points to a particular type of data. This field + indicates the type of data as well as implying the maximum degree <em>K</em> + of the tree and the size of each Key field. + + + </p> + <table class="list"> + <tr> + <th width="20%" align="center">Node Type</th> + <th width="80%" align="left">Description</th> + </tr> + <tr> + <td align="center">0</td> + <td>This tree points to group nodes.</td> + </tr> + <tr> + <td align="center">1</td> + <td>This tree points to raw data chunk nodes.</td> + </tr> + </table> + <p></p> + </td> + </tr> + + <tr> + <td><p>Node Level</p></td> + <td> + <p>The node level indicates the level at which this node appears + in the tree (leaf nodes are at level zero). Not only does the level + indicate whether child pointers point to sub-trees or to data, but + it can also be used to help file consistency checking utilities + reconstruct damaged trees.</p> + </td> </tr> <tr valign="top"> - <td><p>Entries Used</p></td> - <td> - <p>This determines the number of children to which this - node points. All nodes of a particular type of tree - have the same maximum degree, but most nodes will point - to less than that number of children. The valid child - pointers and keys appear at the beginning of the node - and the unused pointers and keys appear at the end of - the node. The unused pointers and keys have undefined - values. - </p> - </td> + <td><p>Entries Used</p></td> + <td> + <p>This determines the number of children to which this node + points. All nodes of a particular type of tree have the same + maximum degree, but most nodes will point to less than that number + of children. The valid child pointers and keys appear at the + beginning of the node and the unused pointers and keys appear at + the end of the node. The unused pointers and keys have undefined + values.</p> + </td> </tr> <tr valign="top"> - <td><p>Address of Left Sibling</p></td> - <td> - <p>This is the relative file address of the left sibling of - the current node. If the current - node is the left-most node at this level then this field - is the <a href="#UndefinedAddress">undefined address</a>. - </p> - </td> + <td><p>Address of Left Sibling</p></td> + <td> + <p> + This is the relative file address of the left sibling of the + current node. If the current node is the left-most node at this + level then this field is the <a href="#UndefinedAddress">undefined + address</a>. + </p> + </td> </tr> <tr valign="top"> - <td><p>Address of Right Sibling</p></td> - <td> - <p>This is the relative file address of the right sibling of - the current node. If the current - node is the right-most node at this level then this - field is the <a href="#UndefinedAddress">undefined address</a>. - </p> - </td> + <td><p>Address of Right Sibling</p></td> + <td> + <p> + This is the relative file address of the right sibling of the + current node. If the current node is the right-most node at this + level then this field is the <a href="#UndefinedAddress">undefined + address</a>. + </p> + </td> </tr> <tr valign="top"> - <td><p>Keys and Child Pointers</p></td> - <td> - <p>Each tree has 2<em>K</em>+1 keys with 2<em>K</em> - child pointers interleaved between the keys. The number - of keys and child pointers actually containing valid - values is determined by the node’s <em>Entries Used</em> field. - If that field is <em>N</em> then the B-link tree contains - <em>N</em> child pointers and <em>N</em>+1 keys. - </p> - </td> + <td><p>Keys and Child Pointers</p></td> + <td> + <p> + Each tree has 2<em>K</em>+1 keys with 2<em>K</em> child pointers + interleaved between the keys. The number of keys and child pointers + actually containing valid values is determined by the node’s + <em>Entries Used</em> field. If that field is <em>N</em> then the + B-link tree contains <em>N</em> child pointers and <em>N</em>+1 + keys. + </p> + </td> </tr> <tr valign="top"> - <td><p>Key</p></td> - <td> - <p>The format and size of the key values is determined by - the type of data to which this tree points. The keys are - ordered and are boundaries for the contents of the child - pointer; that is, the key values represented by child - <em>N</em> fall between Key <em>N</em> and Key - <em>N</em>+1. Whether the interval is open or closed on - each end is determined by the type of data to which the - tree points. - </p> - - <p> - The format of the key depends on the node type. - For nodes of node type 0 (group nodes), the key is formatted as - follows: - - <table class="list"> - <tr> - <td width="20%">A single field of <i>Size of Lengths</i> - bytes:</td> - <td width="80%">Indicates the byte offset into the local heap - for the first object name in the subtree which - that key describes. - </td> - </tr> - </table> - </p> - - - <p> - For nodes of node type 1 (chunked raw data nodes), the key is - formatted as follows: - - <table class="list"> - <tr> - <td width="20%">Bytes 1-4:</td> - <td width="80%">Size of chunk in bytes.</td> - </tr> - <tr> - <td>Bytes 4-8:</td> - <td>Filter mask, a 32-bit bit field indicating which - filters have been skipped for this chunk. Each filter - has an index number in the pipeline (starting at 0, with - the first filter to apply) and if that filter is skipped, - the bit corresponding to its index is set.</td> - </tr> - <tr> - <td>(<em>D + 1</em>) 64-bit fields:</td> - <td>The offset of the - chunk within the dataset where <i>D</i> is the number - of dimensions of the dataset, and the last value is the - offset within the dataset’s datatype and should always be - zero. For example, if - a chunk in a 3-dimensional dataset begins at the - position <code>[5,5,5]</code>, there will be three - such 64-bit values, each with the value of - <code>5</code>, followed by a <code>0</code> value.</td> - </tr> - </table> - </p> - - </td> + <td><p>Key</p></td> + <td> + <p> + The format and size of the key values is determined by the type of + data to which this tree points. The keys are ordered and are + boundaries for the contents of the child pointer; that is, the key + values represented by child <em>N</em> fall between Key <em>N</em> + and Key <em>N</em>+1. Whether the interval is open or closed on + each end is determined by the type of data to which the tree + points. + </p> + + <p>The format of the key depends on the node type. For nodes of + node type 0 (group nodes), the key is formatted as follows:</p> + <table class="list"> + <tr> + <td width="20%">A single field of <i>Size of Lengths</i> + bytes: + </td> + <td width="80%">Indicates the byte offset into the local heap + for the first object name in the subtree which that key + describes.</td> + </tr> + </table> + <p></p> + + + <p>For nodes of node type 1 (chunked raw data nodes), the key is + formatted as follows:</p> + <table class="list"> + <tr> + <td width="20%">Bytes 1-4:</td> + <td width="80%">Size of chunk in bytes.</td> + </tr> + <tr> + <td>Bytes 4-8:</td> + <td>Filter mask, a 32-bit bit field indicating which filters + have been skipped for this chunk. Each filter has an index number + in the pipeline (starting at 0, with the first filter to apply) + and if that filter is skipped, the bit corresponding to its index + is set.</td> + </tr> + <tr> + <td>(<em>D + 1</em>) 64-bit fields: + </td> + <td>The offset of the chunk within the dataset where <i>D</i> + is the number of dimensions of the dataset, and the last value is + the offset within the dataset’s datatype and should always + be zero. For example, if a chunk in a 3-dimensional dataset + begins at the position <code>[5,5,5]</code>, there will be three + such 64-bit values, each with the value of <code>5</code>, + followed by a <code>0</code> value. + </td> + </tr> + </table> + <p></p> + + </td> </tr> <tr valign="top"> - <td><p>Child Pointer</p></td> - <td> - <p>The tree node contains file addresses of subtrees or - data depending on the node level. Nodes at Level 0 point - to data addresses, either raw data chunks or group nodes. - Nodes at non-zero levels point to other nodes of the - same B-tree. - </p> - <p>For raw data chunk nodes, the child pointer is the address - of a single raw data chunk. For group nodes, the child pointer - points to a <a href="#SymbolTable">symbol table</a>, which contains - information for multiple symbol table entries. - </p> - </td> + <td><p>Child Pointer</p></td> + <td> + <p>The tree node contains file addresses of subtrees or data + depending on the node level. Nodes at Level 0 point to data + addresses, either raw data chunks or group nodes. Nodes at non-zero + levels point to other nodes of the same B-tree.</p> + <p> + For raw data chunk nodes, the child pointer is the address of a + single raw data chunk. For group nodes, the child pointer points to + a <a href="#SymbolTable">symbol table</a>, which contains + information for multiple symbol table entries. + </p> + </td> </tr> - </table> - </div> - - <p> - Conceptually, each B-tree node looks like this:</p> - <center> - <table> - <tr valign="top" align="center"> - <td>key[0]</td><td> </td> - <td>child[0]</td><td> </td> - <td>key[1]</td><td> </td> - <td>child[1]</td><td> </td> - <td>key[2]</td><td> </td> - <td>...</td><td> </td> - <td>...</td><td> </td> - <td>key[<i>N</i>-1]</td><td> </td> - <td>child[<i>N</i>-1]</td><td> </td> - <td>key[<i>N</i>]</td> - </tr> - </table> - </center> - <br /> - - where child[<i>i</i>] is a pointer to a sub-tree (at a level - above Level 0) or to data (at Level 0). - Each key[<i>i</i>] describes an <i>item</i> stored by the B-tree - (a chunk or an object of a group node). The range of values - represented by child[<i>i</i>] is indicated by key[<i>i</i>] - and key[<i>i</i>+1]. - - - <p>The following question must next be answered: - “Is the value described by key[<i>i</i>] contained in - child[<i>i</i>-1] or in child[<i>i</i>]?” - The answer depends on the type of tree. - In trees for groups (node type 0) the object described by - key[<i>i</i>] is the greatest object contained in - child[<i>i</i>-1] while in chunk trees (node type 1) the - chunk described by key[<i>i</i>] is the least chunk in - child[<i>i</i>].</p> - - <p>That means that key[0] for group trees is sometimes unused; - it points to offset zero in the heap, which is always the - empty string and compares as “less-than” any valid object name.</p> - - <p>And key[<i>N</i>] for chunk trees is sometimes unused; - it contains a chunk offset which compares as “greater-than” - any other chunk offset and has a chunk byte size of zero - to indicate that it is not actually allocated.</p> - -<br /> -<h4><a name="V2Btrees"> -III.A.2. Disk Format: Level 1A2 - Version 2 B-trees</a></h4> - - <p>Version 2 B-trees are “traditional” B-trees, with one major difference. - Instead of just using a simple pointer (or address in the file) to a - child of an internal node, the pointer to the child node contains two - additional pieces of information: the number of records in the child - node itself, and the total number of records in the child node and - all its descendants. Storing this additional information allows fast - array-like indexing to locate the n<sup>th</sup> record in the B-tree.</p> - - <p>The entry into a version 2 B-tree is a header which contains global - information about the structure of the B-tree. The <em>root node - address</em> - field in the header points to the B-tree root node, which is either an - internal or leaf node, depending on the value in the header’s - <em>depth</em> field. An internal node consists of records plus - pointers to further leaf or internal nodes in the tree. A leaf node - consists of solely of records. The format of the records depends on - the B-tree type (stored in the header).</p> - - <div align="center"> - <table class="format"> - <caption> - Version 2 B-tree Header - </caption> + </table> +</div> + +<p>Conceptually, each B-tree node looks like this:</p> +<center> + <table> + <tr valign="top" align="center"> + <td>key[0]</td> + <td> </td> + <td>child[0]</td> + <td> </td> + <td>key[1]</td> + <td> </td> + <td>child[1]</td> + <td> </td> + <td>key[2]</td> + <td> </td> + <td>...</td> + <td> </td> + <td>...</td> + <td> </td> + <td>key[<i>N</i>-1] + </td> + <td> </td> + <td>child[<i>N</i>-1] + </td> + <td> </td> + <td>key[<i>N</i>] + </td> + </tr> + </table> +</center> +<br /> where child[ +<i>i</i>] is a pointer to a sub-tree (at a level above Level 0) or to +data (at Level 0). Each key[ +<i>i</i>] describes an +<i>item</i> stored by the B-tree (a chunk or an object of a group node). +The range of values represented by child[ +<i>i</i>] is indicated by key[ +<i>i</i>] and key[ +<i>i</i>+1]. + + +<p> + The following question must next be answered: “Is the value + described by key[<i>i</i>] contained in child[<i>i</i>-1] or in child[<i>i</i>]?” + The answer depends on the type of tree. In trees for groups (node type + 0) the object described by key[<i>i</i>] is the greatest object + contained in child[<i>i</i>-1] while in chunk trees (node type 1) the + chunk described by key[<i>i</i>] is the least chunk in child[<i>i</i>]. +</p> + +<p>That means that key[0] for group trees is sometimes unused; it + points to offset zero in the heap, which is always the empty string and + compares as “less-than” any valid object name.</p> + +<p> + And key[<i>N</i>] for chunk trees is sometimes unused; it contains a + chunk offset which compares as “greater-than” any other + chunk offset and has a chunk byte size of zero to indicate that it is + not actually allocated. +</p> + +<br /> +<h4> + <a name="V2Btrees"> III.A.2. Disk Format: Level 1A2 - Version 2 + B-trees</a> +</h4> + +<p> + Version 2 B-trees are “traditional” B-trees, with one major + difference. Instead of just using a simple pointer (or address in the + file) to a child of an internal node, the pointer to the child node + contains two additional pieces of information: the number of records in + the child node itself, and the total number of records in the child + node and all its descendants. Storing this additional information + allows fast array-like indexing to locate the n<sup>th</sup> record in + the B-tree. +</p> + +<p> + The entry into a version 2 B-tree is a header which contains global + information about the structure of the B-tree. The <em>root node + address</em> field in the header points to the B-tree root node, which is + either an internal or leaf node, depending on the value in the + header’s <em>depth</em> field. An internal node consists of + records plus pointers to further leaf or internal nodes in the tree. A + leaf node consists of solely of records. The format of the records + depends on the B-tree type (stored in the header). +</p> + +<div align="center"> + <table class="format"> + <caption>Version 2 B-tree Header</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> - - <tr> - <td colspan="4">Signature</td> - </tr> - <tr> - <td>Version</td> - <td>Type</td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> - <tr> - <td colspan="4">Node Size</td> - </tr> - <tr> - <td colspan="2">Record Size</td> - <td colspan="2">Depth</td> - </tr> - <tr> - <td>Split Percent</td> - <td>Merge Percent</td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> - <tr> - <td colspan="4"><br />Root Node Address<sup>O</sup><br /><br /></td> - </tr> - <tr> - <td colspan="2">Number of Records in Root Node</td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> - <tr> - <td colspan="4"><br />Total Number of Records in B-tree<sup>L</sup><br /><br /></td> - </tr> - <tr> - <td colspan="4">Checksum</td> - </tr> - </table> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> - <table class="note"> + </tr> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> + <td colspan="4">Signature</td> + </tr> <tr> - <td> </td> - <td> - (Items marked with an ‘L’ in the above table are of the size - specified in “Size of Lengths” field in the superblock.) - </td></tr> - </table> + <td>Version</td> + <td>Type</td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + <tr> + <td colspan="4">Node Size</td> + </tr> + <tr> + <td colspan="2">Record Size</td> + <td colspan="2">Depth</td> + </tr> + <tr> + <td>Split Percent</td> + <td>Merge Percent</td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + <tr> + <td colspan="4"><br />Root Node Address<sup>O</sup><br /> + <br /></td> + </tr> + <tr> + <td colspan="2">Number of Records in Root Node</td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + <tr> + <td colspan="4"><br />Total Number of Records in B-tree<sup>L</sup><br /> + <br /></td> + </tr> + <tr> + <td colspan="4">Checksum</td> + </tr> + </table> - </div> + <table class="note"> + <tr> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> + <tr> + <td> </td> + <td>(Items marked with an ‘L’ in the above table are + of the size specified in “Size of Lengths” field in the + superblock.)</td> + </tr> + </table> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Signature</p></td> - <td> - <p>The ASCII character string “<code>BTHD</code>” is - used to indicate the header of a version 2 B-link tree node. - </p> - </td> - </tr> - - <tr> - <td><p>Version</p></td> - <td> - <p>The version number for this B-tree header. This document - describes version 0. - </p> - </td> - </tr> - - <tr> - <td><p>Type</p></td> - <td> - <p>This field indicates the type of B-tree: - <table class="list"> - <tr> - <th width="20%" align="center">Value</th> - <th width="80%" align="left">Description</th> - </tr> - <tr> - <td align="center">0</td> - <td>A “testing” B-tree, this value should <em>not</em> be - used for storing records in actual HDF5 files. - </td> - </tr> - <tr> - <td align="center">1</td> - <td>This B-tree is used for indexing indirectly accessed, - non-filtered ‘huge’ fractal heap objects. - </td> - </tr> - <tr> - <td align="center">2</td> - <td>This B-tree is used for indexing indirectly accessed, - filtered ‘huge’ fractal heap objects. - </td> - </tr> - <tr> - <td align="center">3</td> - <td>This B-tree is used for indexing directly accessed, - non-filtered ‘huge’ fractal heap objects. - </td> - </tr> - <tr> - <td align="center">4</td> - <td>This B-tree is used for indexing directly accessed, - filtered ‘huge’ fractal heap objects. - </td> - </tr> - <tr> - <td align="center">5</td> - <td>This B-tree is used for indexing the ‘name’ field for - links in indexed groups. - </td> - </tr> - <tr> - <td align="center">6</td> - <td>This B-tree is used for indexing the ‘creation order’ - field for links in indexed groups. - </td> - </tr> - <tr> - <td align="center">7</td> - <td>This B-tree is used for indexing shared object header - messages. - </td> - </tr> - <tr> - <td align="center">8</td> - <td>This B-tree is used for indexing the ‘name’ field for - indexed attributes. - </td> - </tr> - <tr> - <td align="center">9</td> - <td>This B-tree is used for indexing the ‘creation order’ - field for indexed attributes. - </td> - </tr> - </table></p> - <p>The format of records for each type is described below.</p> - </td> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Signature</p></td> + <td> + <p> + The ASCII character string “ + <code>BTHD</code> + ” is used to indicate the header of a version 2 B-link tree + node. + </p> + </td> + </tr> + + <tr> + <td><p>Version</p></td> + <td> + <p>The version number for this B-tree header. This document + describes version 0.</p> + </td> + </tr> + + <tr> + <td><p>Type</p></td> + <td> + <p>This field indicates the type of B-tree:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Value</th> + <th width="80%" align="left">Description</th> + </tr> + <tr> + <td align="center">0</td> + <td>A “testing” B-tree, this value should <em>not</em> + be used for storing records in actual HDF5 files. + </td> + </tr> + <tr> + <td align="center">1</td> + <td>This B-tree is used for indexing indirectly accessed, + non-filtered ‘huge’ fractal heap objects.</td> + </tr> + <tr> + <td align="center">2</td> + <td>This B-tree is used for indexing indirectly accessed, + filtered ‘huge’ fractal heap objects.</td> + </tr> + <tr> + <td align="center">3</td> + <td>This B-tree is used for indexing directly accessed, + non-filtered ‘huge’ fractal heap objects.</td> + </tr> + <tr> + <td align="center">4</td> + <td>This B-tree is used for indexing directly accessed, + filtered ‘huge’ fractal heap objects.</td> + </tr> + <tr> + <td align="center">5</td> + <td>This B-tree is used for indexing the ‘name’ + field for links in indexed groups.</td> + </tr> + <tr> + <td align="center">6</td> + <td>This B-tree is used for indexing the ‘creation + order’ field for links in indexed groups.</td> + </tr> + <tr> + <td align="center">7</td> + <td>This B-tree is used for indexing shared object header + messages.</td> + </tr> + <tr> + <td align="center">8</td> + <td>This B-tree is used for indexing the ‘name’ + field for indexed attributes.</td> + </tr> + <tr> + <td align="center">9</td> + <td>This B-tree is used for indexing the ‘creation + order’ field for indexed attributes.</td> + </tr> + </table> + <p></p> + <p>The format of records for each type is described below.</p> + </td> </tr> <tr valign="top"> - <td><p>Node Size</p></td> - <td> - <p>This is the size in bytes of all B-tree nodes. - </p> - </td> + <td><p>Node Size</p></td> + <td> + <p>This is the size in bytes of all B-tree nodes.</p> + </td> </tr> <tr valign="top"> - <td><p>Record Size</p></td> - <td> - <p>This field is the size in bytes of the B-tree record. - </p> - </td> + <td><p>Record Size</p></td> + <td> + <p>This field is the size in bytes of the B-tree record.</p> + </td> </tr> <tr valign="top"> - <td><p>Depth</p></td> - <td> - <p>This is the depth of the B-tree. - </p> - </td> + <td><p>Depth</p></td> + <td> + <p>This is the depth of the B-tree.</p> + </td> </tr> <tr valign="top"> - <td><p>Split Percent</p></td> - <td> - <p>The percent full that a node needs to increase above before it - is split. - </p> - </td> + <td><p>Split Percent</p></td> + <td> + <p>The percent full that a node needs to increase above before + it is split.</p> + </td> </tr> <tr valign="top"> - <td><p>Merge Percent</p></td> - <td> - <p>The percent full that a node needs to be decrease below before it - is split. - </p> - </td> + <td><p>Merge Percent</p></td> + <td> + <p>The percent full that a node needs to be decrease below + before it is split.</p> + </td> </tr> <tr valign="top"> - <td><p>Root Node Address</p></td> - <td> - <p>This is the address of the root B-tree node. A B-tree with - no records will have the <a href="#UndefinedAddress">undefined - address</a> in this field. - </p> - </td> + <td><p>Root Node Address</p></td> + <td> + <p> + This is the address of the root B-tree node. A B-tree with no + records will have the <a href="#UndefinedAddress">undefined + address</a> in this field. + </p> + </td> </tr> <tr valign="top"> - <td><p>Number of Records in Root Node</p></td> - <td> - <p>This is the number of records in the root node. - </p> - </td> + <td><p>Number of Records in Root Node</p></td> + <td> + <p>This is the number of records in the root node.</p> + </td> </tr> <tr valign="top"> - <td><p>Total Number of Records in B-tree</p></td> - <td> - <p>This is the total number of records in the entire B-tree. - </p> - </td> + <td><p>Total Number of Records in B-tree</p></td> + <td> + <p>This is the total number of records in the entire B-tree.</p> + </td> </tr> <tr valign="top"> - <td><p>Checksum</p></td> - <td> - <p>This is the checksum for the B-tree header. - </p> - </td> + <td><p>Checksum</p></td> + <td> + <p>This is the checksum for the B-tree header.</p> + </td> </tr> - </table> - </div> + </table> +</div> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Version 2 B-tree Internal Node - </caption> +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Version 2 B-tree Internal Node</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td colspan="4">Signature</td> + <td colspan="4">Signature</td> </tr> <tr> - <td>Version</td> - <td>Type</td> - <td colspan="2">Records 0, 1, 2...N-1 <em>(variable size)</em></td> + <td>Version</td> + <td>Type</td> + <td colspan="2">Records 0, 1, 2...N-1 <em>(variable size)</em></td> </tr> - <tr> - <td colspan="4"><br />Child Node Pointer 0<sup>O</sup><br /><br /></td> - </tr> - <tr> - <td colspan="4"><br />Number of Records N<sub>0</sub> for Child Node 0 <em>(variable size)</em></td> - </tr> - <tr> - <td colspan="4"><br />Total Number of Records for Child Node 0 <em>(optional, variable size)</em></td> - </tr> - <tr> - <td colspan="4"><br />Child Node Pointer 1<sup>O</sup><br /><br /></td> - </tr> - <td colspan="4"><br />Number of Records N<sub>1</sub> for Child Node 1 <em>(variable size)</em></td> - </tr> - <tr> - <td colspan="4"><br />Total Number of Records for Child Node 1 <em>(optional, variable size)</em></td> - </tr> - <tr> - <td colspan="4">...</td> - </tr> - <tr> - <td colspan="4"><br />Child Node Pointer N<sup>O</sup><br /><br /></td> - </tr> - <tr> - <td colspan="4"><br />Number of Records N<sub>n</sub> for Child Node N <em>(variable size)</em></td> - </tr> - <tr> - <td colspan="4"><br />Total Number of Records for Child Node N <em>(optional, variable size)</em></td> - </tr> - <tr> - <td colspan="4">Checksum</td> - </tr> - </table> + <tr> + <td colspan="4"><br />Child Node Pointer 0<sup>O</sup><br /> + <br /></td> + </tr> + <tr> + <td colspan="4"><br />Number of Records N<sub>0</sub> for Child + Node 0 <em>(variable size)</em></td> + </tr> + <tr> + <td colspan="4"><br />Total Number of Records for Child Node 0 + <em>(optional, variable size)</em></td> + </tr> + <tr> + <td colspan="4"><br />Child Node Pointer 1<sup>O</sup><br /> + <br /></td> + </tr> + <td colspan="4"><br />Number of Records N<sub>1</sub> for Child + Node 1 <em>(variable size)</em></td> + <tr></tr> + <tr> + <td colspan="4"><br />Total Number of Records for Child Node 1 + <em>(optional, variable size)</em></td> + </tr> + <tr> + <td colspan="4">...</td> + </tr> + <tr> + <td colspan="4"><br />Child Node Pointer N<sup>O</sup><br /> + <br /></td> + </tr> + <tr> + <td colspan="4"><br />Number of Records N<sub>n</sub> for Child + Node N <em>(variable size)</em></td> + </tr> + <tr> + <td colspan="4"><br />Total Number of Records for Child Node N + <em>(optional, variable size)</em></td> + </tr> + <tr> + <td colspan="4">Checksum</td> + </tr> + </table> - <table class="note"> + <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> - </table> - </div> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> + </table> +</div> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Signature</p></td> - <td> - <p>The ASCII character string “<code>BTIN</code>” is - used to indicate the internal node of a B-link tree. - </p> - </td> + <td><p>Signature</p></td> + <td> + <p> + The ASCII character string “ + <code>BTIN</code> + ” is used to indicate the internal node of a B-link tree. + </p> + </td> </tr> <tr> - <td><p>Version</p></td> - <td> - <p>The version number for this B-tree internal node. - This document describes version 0. - </p> - </td> + <td><p>Version</p></td> + <td> + <p>The version number for this B-tree internal node. This + document describes version 0.</p> + </td> </tr> <tr> - <td><p>Type</p></td> - <td> - <p>This field is the type of the B-tree node. It should always - be the same as the B-tree type in the header. - </p> - </td> + <td><p>Type</p></td> + <td> + <p>This field is the type of the B-tree node. It should always + be the same as the B-tree type in the header.</p> + </td> </tr> <tr> - <td><p>Records</p></td> - <td> - <p>The size of this field is determined by the number of records - for this node and the record size (from the header). The format - of records depends on the type of B-tree. - </p> - </td> + <td><p>Records</p></td> + <td> + <p>The size of this field is determined by the number of records + for this node and the record size (from the header). The format of + records depends on the type of B-tree.</p> + </td> </tr> <tr> - <td><p>Child Node Pointer</p></td> - <td> - <p>This field is the address of the child node pointed to by the - internal node. - </p> - </td> + <td><p>Child Node Pointer</p></td> + <td> + <p>This field is the address of the child node pointed to by the + internal node.</p> + </td> </tr> <tr> - <td><p>Number of Records in Child Node</p></td> - <td> - <p>This is the number of records in the child node pointed to by - the corresponding <em>Node Pointer</em>. - </p> - <p>The number of bytes used to store this field is determined by - the maximum possible number of records able to be stored in the - child node. - </p> - <p> - The maximum number of records in a child node is computed - in the following way: - + <td><p>Number of Records in Child Node</p></td> + <td> + <p> + This is the number of records in the child node pointed to by the + corresponding <em>Node Pointer</em>. + </p> + <p>The number of bytes used to store this field is determined by + the maximum possible number of records able to be stored in the + child node.</p> + <p>The maximum number of records in a child node is computed in + the following way:</p> <ul> - <li>Subtract the fixed size overhead for - the child node (for example, its signature, version, - checksum, and so on and <em>one</em> pointer triplet - of information for the child node (because there is one - more pointer triplet than records in each internal node)) - from the size of nodes for the B-tree. </li> - <li>Divide that result by the size of a record plus the - pointer triplet of information stored to reach each - child node from this node. + <li>Subtract the fixed size overhead for the child node (for + example, its signature, version, checksum, and so on and <em>one</em> + pointer triplet of information for the child node (because there + is one more pointer triplet than records in each internal node)) + from the size of nodes for the B-tree. + </li> + <li>Divide that result by the size of a record plus the + pointer triplet of information stored to reach each child node + from this node.</li> </ul> - </p> - <p> - Note that leaf nodes do not encode any - child pointer triplets, so the maximum number of records in a - leaf node is just the node size minus the leaf node overhead, - divided by the record size. - </p> - <p> - Also note that the first level of internal nodes above the - leaf nodes do not encode the <em>Total Number of Records in Child - Node</em> value in the child pointer triplets (since it is the - same as the <em>Number of Records in Child Node</em>), so the - maximum number of records in these nodes is computed with the - equation above, but using (<em>Child Pointer</em>, <em>Number of - Records in Child Node</em>) pairs instead of triplets. - </p> - <p> - The number of - bytes used to encode this field is the least number of bytes - required to encode the maximum number of records in a child - node value for the child nodes below this level - in the B-tree. - </p> - <p> - For example, if the maximum number of child records is - 123, one byte will be used to encode these values in this - node; if the maximum number of child records is - 20000, two bytes will be used to encode these values in this - node; and so on. The maximum number of bytes used to - encode these values is 8 (in other words, an unsigned - 64-bit integer). - </p> - </td> - </tr> - - <tr> - <td><p>Total Number of Records in Child Node</p></td> - <td> - <p>This is the total number of records for the node pointed to by - the corresponding <em>Node Pointer</em> and all its children. - This field exists only in nodes whose depth in the B-tree node - is greater than 1 (in other words, the “twig” - internal nodes, just above leaf nodes, do not store this - field in their child node pointers). - </p> - <p>The number of bytes used to store this field is determined by - the maximum possible number of records able to be stored in the - child node and its descendants. - </p> - <p> - The maximum possible number of records able to be stored in a - child node and its descendants is computed iteratively, in the - following way: The maximum number of records in a leaf node - is computed, then that value is used to compute the maximum - possible number of records in the first level of internal nodes - above the leaf nodes. Multiplying these two values together - determines the maximum possible number of records in child node - pointers for the level of nodes two levels above leaf nodes. - This process is continued up to any level in the B-tree. - </p> - <p> - The number of bytes used to encode this value is computed in - the same way as for the <em>Number of Records in Child Node</em> - field. - </p> - </td> - </tr> - - <tr> - <td><p>Checksum</p></td> - <td> - <p>This is the checksum for this node. - </p> - </td> + <p></p> + <p>Note that leaf nodes do not encode any child pointer + triplets, so the maximum number of records in a leaf node is just + the node size minus the leaf node overhead, divided by the record + size.</p> + <p> + Also note that the first level of internal nodes above the leaf + nodes do not encode the <em>Total Number of Records in Child + Node</em> value in the child pointer triplets (since it is the same as + the <em>Number of Records in Child Node</em>), so the maximum + number of records in these nodes is computed with the equation + above, but using (<em>Child Pointer</em>, <em>Number of + Records in Child Node</em>) pairs instead of triplets. + </p> + <p>The number of bytes used to encode this field is the least + number of bytes required to encode the maximum number of records in + a child node value for the child nodes below this level in the + B-tree.</p> + <p>For example, if the maximum number of child records is 123, + one byte will be used to encode these values in this node; if the + maximum number of child records is 20000, two bytes will be used to + encode these values in this node; and so on. The maximum number of + bytes used to encode these values is 8 (in other words, an unsigned + 64-bit integer).</p> + </td> </tr> - </table> - </div> + <tr> + <td><p>Total Number of Records in Child Node</p></td> + <td> + <p> + This is the total number of records for the node pointed to by the + corresponding <em>Node Pointer</em> and all its children. This + field exists only in nodes whose depth in the B-tree node is + greater than 1 (in other words, the “twig” internal + nodes, just above leaf nodes, do not store this field in their + child node pointers). + </p> + <p>The number of bytes used to store this field is determined by + the maximum possible number of records able to be stored in the + child node and its descendants.</p> + <p>The maximum possible number of records able to be stored in a + child node and its descendants is computed iteratively, in the + following way: The maximum number of records in a leaf node is + computed, then that value is used to compute the maximum possible + number of records in the first level of internal nodes above the + leaf nodes. Multiplying these two values together determines the + maximum possible number of records in child node pointers for the + level of nodes two levels above leaf nodes. This process is + continued up to any level in the B-tree.</p> + <p> + The number of bytes used to encode this value is computed in the + same way as for the <em>Number of Records in Child Node</em> field. + </p> + </td> + </tr> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Version 2 B-tree Leaf Node - </caption> + <tr> + <td><p>Checksum</p></td> + <td> + <p>This is the checksum for this node.</p> + </td> + </tr> + + </table> +</div> + +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Version 2 B-tree Leaf Node</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td colspan="4">Signature</td> + <td colspan="4">Signature</td> </tr> <tr> - <td>Version</td> - <td>Type</td> - <td colspan="2">Record 0, 1, 2...N-1 <em>(variable size)</em></td> - </tr> - <tr> - <td colspan="4">Checksum</td> - </tr> - </table> - </div> + <td>Version</td> + <td>Type</td> + <td colspan="2">Record 0, 1, 2...N-1 <em>(variable size)</em></td> + </tr> + <tr> + <td colspan="4">Checksum</td> + </tr> + </table> +</div> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Signature</p></td> - <td> - <p>The ASCII character string “<code>BTLF</code>“ is - used to indicate the leaf node of a version 2 B-link tree. - </p> - </td> + <td><p>Signature</p></td> + <td> + <p> + The ASCII character string “ + <code>BTLF</code> + “ is used to indicate the leaf node of a version 2 B-link + tree. + </p> + </td> </tr> <tr> - <td><p>Version</p></td> - <td> - <p>The version number for this B-tree leaf node. - This document describes version 0. - </p> - </td> + <td><p>Version</p></td> + <td> + <p>The version number for this B-tree leaf node. This document + describes version 0.</p> + </td> </tr> <tr> - <td><p>Type</p></td> - <td> - <p>This field is the type of the B-tree node. It should always - be the same as the B-tree type in the header. - </p> - </td> - </tr> + <td><p>Type</p></td> + <td> + <p>This field is the type of the B-tree node. It should always + be the same as the B-tree type in the header.</p> + </td> + </tr> <tr> - <td><p>Records</p></td> - <td> - <p>The size of this field is determined by the number of records - for this node and the record size (from the header). The format - of records depends on the type of B-tree. - </p> - </td> + <td><p>Records</p></td> + <td> + <p>The size of this field is determined by the number of records + for this node and the record size (from the header). The format of + records depends on the type of B-tree.</p> + </td> </tr> <tr> - <td><p>Checksum</p></td> - <td> - <p>This is the checksum for this node. - </p> - </td> + <td><p>Checksum</p></td> + <td> + <p>This is the checksum for this node.</p> + </td> </tr> - </table> - </div> + </table> +</div> - <br /> - <p>The record layout for each stored (in other words, non-testing) +<br /> +<p>The record layout for each stored (in other words, non-testing) B-tree type is as follows:</p> - <div align="center"> - <table class="format"> - <caption> - Version 2 B-tree, Type 1 Record Layout - Indirectly Accessed, Non-Filtered, - ‘Huge’ Fractal Heap Objects - </caption> +<div align="center"> + <table class="format"> + <caption>Version 2 B-tree, Type 1 Record Layout - Indirectly + Accessed, Non-Filtered, ‘Huge’ Fractal Heap Objects</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> - </tr> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + </tr> <tr> - <td colspan="4"><br />Huge Object Address<sup>O</sup><br /><br /></td> + <td colspan="4"><br />Huge Object Address<sup>O</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Huge Object Length<sup>L</sup><br /><br /></td> + <td colspan="4"><br />Huge Object Length<sup>L</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Huge Object ID<sup>L</sup><br /><br /></td> + <td colspan="4"><br />Huge Object ID<sup>L</sup><br /> + <br /></td> </tr> - </table> + </table> - <table class="note"> + <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> <tr> - <td> </td> - <td> - (Items marked with an ‘L’ in the above table are of the size - specified in “Size of Lengths” field in the superblock.) - </td></tr> - </table> + <td> </td> + <td>(Items marked with an ‘L’ in the above table are + of the size specified in “Size of Lengths” field in the + superblock.)</td> + </tr> + </table> - </div> +</div> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Huge Object Address</p></td> - <td> - <p>The address of the huge object in the file. - </p> - </td> + <td><p>Huge Object Address</p></td> + <td> + <p>The address of the huge object in the file.</p> + </td> </tr> <tr> - <td><p>Huge Object Length</p></td> - <td> - <p>The length of the huge object in the file. - </p> - </td> + <td><p>Huge Object Length</p></td> + <td> + <p>The length of the huge object in the file.</p> + </td> </tr> <tr> - <td><p>Huge Object ID</p></td> - <td> - <p>The heap ID for the huge object. - </p> - </td> + <td><p>Huge Object ID</p></td> + <td> + <p>The heap ID for the huge object.</p> + </td> </tr> - </table> - </div> + </table> +</div> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Version 2 B-tree, Type 2 Record Layout - Indirectly Accessed, Filtered, - ‘Huge’ Fractal Heap Objects - </caption> +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Version 2 B-tree, Type 2 Record Layout - Indirectly + Accessed, Filtered, ‘Huge’ Fractal Heap Objects</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td colspan="4"><br />Filtered Huge Object Address<sup>O</sup><br /><br /></td> + <td colspan="4"><br />Filtered Huge Object Address<sup>O</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Filtered Huge Object Length<sup>L</sup><br /><br /></td> + <td colspan="4"><br />Filtered Huge Object Length<sup>L</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4">Filter Mask</td> + <td colspan="4">Filter Mask</td> </tr> <tr> - <td colspan="4"><br />Filtered Huge Object Memory Size<sup>L</sup><br /><br /></td> + <td colspan="4"><br />Filtered Huge Object Memory Size<sup>L</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Huge Object ID<sup>L</sup><br /><br /></td> + <td colspan="4"><br />Huge Object ID<sup>L</sup><br /> + <br /></td> </tr> - </table> + </table> - <table class="note"> + <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> <tr> - <td> </td> - <td> - (Items marked with an ‘L’ in the above table are of the size - specified in “Size of Lengths” field in the superblock.) - </td></tr> - </table> + <td> </td> + <td>(Items marked with an ‘L’ in the above table are + of the size specified in “Size of Lengths” field in the + superblock.)</td> + </tr> + </table> - </div> +</div> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Filtered Huge Object Address</p></td> - <td> - <p>The address of the filtered huge object in the file. - </p> - </td> + <td><p>Filtered Huge Object Address</p></td> + <td> + <p>The address of the filtered huge object in the file.</p> + </td> </tr> <tr> - <td><p>Filtered Huge Object Length</p></td> - <td> - <p>The length of the filtered huge object in the file. - </p> - </td> + <td><p>Filtered Huge Object Length</p></td> + <td> + <p>The length of the filtered huge object in the file.</p> + </td> </tr> <tr> - <td><p>Filter Mask</p></td> - <td> - <p>A 32-bit bit field indicating which filters have been skipped for - this chunk. Each filter has an index number in the pipeline - (starting at 0, with the first filter to apply) and if that - filter is skipped, the bit corresponding to its index is set. - </p> - </td> + <td><p>Filter Mask</p></td> + <td> + <p>A 32-bit bit field indicating which filters have been skipped + for this chunk. Each filter has an index number in the pipeline + (starting at 0, with the first filter to apply) and if that filter + is skipped, the bit corresponding to its index is set.</p> + </td> </tr> <tr> - <td><p>Filtered Huge Object Memory Size</p></td> - <td> - <p>The size of the de-filtered huge object in memory. - </p> - </td> + <td><p>Filtered Huge Object Memory Size</p></td> + <td> + <p>The size of the de-filtered huge object in memory.</p> + </td> </tr> <tr> - <td><p>Huge Object ID</p></td> - <td> - <p>The heap ID for the huge object. - </p> - </td> + <td><p>Huge Object ID</p></td> + <td> + <p>The heap ID for the huge object.</p> + </td> </tr> - </table> - </div> + </table> +</div> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Version 2 B-tree, Type 3 Record Layout - Directly Accessed, Non-Filtered, - ‘Huge’ Fractal Heap Objects - </caption> +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Version 2 B-tree, Type 3 Record Layout - Directly + Accessed, Non-Filtered, ‘Huge’ Fractal Heap Objects</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> - </tr> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + </tr> <tr> - <td colspan="4"><br />Huge Object Address<sup>O</sup><br /><br /></td> + <td colspan="4"><br />Huge Object Address<sup>O</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Huge Object Length<sup>L</sup><br /><br /></td> + <td colspan="4"><br />Huge Object Length<sup>L</sup><br /> + <br /></td> </tr> - </table> + </table> - <table class="note"> + <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> <tr> - <td> </td> - <td> - (Items marked with an ‘L’ in the above table are of the size - specified in “Size of Lengths” field in the superblock.) - </td></tr> - </table> + <td> </td> + <td>(Items marked with an ‘L’ in the above table are + of the size specified in “Size of Lengths” field in the + superblock.)</td> + </tr> + </table> - </div> +</div> - <br /> - <div align="center"> - <table class="desc"> +<br /> +<div align="center"> + <table class="desc"> <tr> - <th width="30%">Field Name</th> - <th>Description</th> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Huge Object Address</p></td> - <td> - <p>The address of the huge object in the file. - </p> - </td> + <td><p>Huge Object Address</p></td> + <td> + <p>The address of the huge object in the file.</p> + </td> </tr> <tr> - <td><p>Huge Object Length</p></td> - <td> - <p>The length of the huge object in the file. - </p> - </td> + <td><p>Huge Object Length</p></td> + <td> + <p>The length of the huge object in the file.</p> + </td> </tr> - </table> - </div> + </table> +</div> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Version 2 B-tree, Type 4 Record Layout - Directly Accessed, Filtered, - ‘Huge’ Fractal Heap Objects - </caption> +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Version 2 B-tree, Type 4 Record Layout - Directly + Accessed, Filtered, ‘Huge’ Fractal Heap Objects</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td colspan="4"><br />Filtered Huge Object Address<sup>O</sup><br /><br /></td> + <td colspan="4"><br />Filtered Huge Object Address<sup>O</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Filtered Huge Object Length<sup>L</sup><br /><br /></td> + <td colspan="4"><br />Filtered Huge Object Length<sup>L</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4">Filter Mask</td> + <td colspan="4">Filter Mask</td> </tr> <tr> - <td colspan="4"><br />Filtered Huge Object Memory Size<sup>L</sup><br /><br /></td> + <td colspan="4"><br />Filtered Huge Object Memory Size<sup>L</sup><br /> + <br /></td> </tr> - </table> + </table> - <table class="note"> + <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> <tr> - <td> </td> - <td> - (Items marked with an ‘L’ in the above table are of the size - specified in “Size of Lengths” field in the superblock.) - </td></tr> - </table> + <td> </td> + <td>(Items marked with an ‘L’ in the above table are + of the size specified in “Size of Lengths” field in the + superblock.)</td> + </tr> + </table> - </div> +</div> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Filtered Huge Object Address</p></td> - <td> - <p>The address of the filtered huge object in the file. - </p> - </td> + <td><p>Filtered Huge Object Address</p></td> + <td> + <p>The address of the filtered huge object in the file.</p> + </td> </tr> <tr> - <td><p>Filtered Huge Object Length</p></td> - <td> - <p>The length of the filtered huge object in the file. - </p> - </td> + <td><p>Filtered Huge Object Length</p></td> + <td> + <p>The length of the filtered huge object in the file.</p> + </td> </tr> <tr> - <td><p>Filter Mask</p></td> - <td> - <p>A 32-bit bit field indicating which filters have been skipped for - this chunk. Each filter has an index number in the pipeline - (starting at 0, with the first filter to apply) and if that - filter is skipped, the bit corresponding to its index is set. - </p> - </td> + <td><p>Filter Mask</p></td> + <td> + <p>A 32-bit bit field indicating which filters have been skipped + for this chunk. Each filter has an index number in the pipeline + (starting at 0, with the first filter to apply) and if that filter + is skipped, the bit corresponding to its index is set.</p> + </td> </tr> <tr> - <td><p>Filtered Huge Object Memory Size</p></td> - <td> - <p>The size of the de-filtered huge object in memory. - </p> - </td> + <td><p>Filtered Huge Object Memory Size</p></td> + <td> + <p>The size of the de-filtered huge object in memory.</p> + </td> </tr> - </table> - </div> + </table> +</div> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Version 2 B-tree, Type 5 Record Layout - Link Name for Indexed Group - </caption> +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Version 2 B-tree, Type 5 Record Layout - Link Name + for Indexed Group</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> - </tr> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + </tr> <tr> - <td colspan="4">Hash of Name</td> + <td colspan="4">Hash of Name</td> </tr> <tr> - <td colspan="4">ID <em>(bytes 1-4)</em></td> - </tr> + <td colspan="4">ID <em>(bytes 1-4)</em></td> + </tr> <tr> - <td colspan="3">ID <em>(bytes 5-7)</em></td> - </tr> + <td colspan="3">ID <em>(bytes 5-7)</em></td> + </tr> - </table> - </div> + </table> +</div> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Hash</p></td> - <td> - <p>This field is hash value of the name for the link. The hash - value is the Jenkins’ lookup3 checksum algorithm applied to - the link’s name. - </p> - </td> + <td><p>Hash</p></td> + <td> + <p>This field is hash value of the name for the link. The hash + value is the Jenkins’ lookup3 checksum algorithm applied to + the link’s name.</p> + </td> </tr> <tr> - <td><p>ID</p></td> - <td> - <p>This is a 7-byte sequence of bytes and is the heap ID for the - link record in the group’s fractal heap.</p> - </td> + <td><p>ID</p></td> + <td> + <p>This is a 7-byte sequence of bytes and is the heap ID for the + link record in the group’s fractal heap.</p> + </td> </tr> - </table> - </div> + </table> +</div> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Version 2 B-tree, Type 6 Record Layout - Creation Order for Indexed Group - </caption> +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Version 2 B-tree, Type 6 Record Layout - Creation + Order for Indexed Group</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td colspan="4"><br />Creation Order <em>(8 bytes)</em><br /><br /></td> + <td colspan="4"><br />Creation Order <em>(8 bytes)</em><br /> + <br /></td> </tr> <tr> - <td colspan="4">ID <em>(bytes 1-4)</em></td> + <td colspan="4">ID <em>(bytes 1-4)</em></td> </tr> <tr> - <td colspan="3">ID <em>(bytes 5-7)</em></td> + <td colspan="3">ID <em>(bytes 5-7)</em></td> </tr> - </table> - </div> + </table> +</div> - <br /> - <div align="center"> - <table class="desc"> +<br /> +<div align="center"> + <table class="desc"> <tr> - <th width="30%">Field Name</th> - <th>Description</th> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Creation Order</p></td> - <td> - <p>This field is the creation order value for the link. - </p> - </td> + <td><p>Creation Order</p></td> + <td> + <p>This field is the creation order value for the link.</p> + </td> </tr> <tr> - <td><p>ID</p></td> - <td> - <p>This is a 7-byte sequence of bytes and is the heap ID for the - link record in the group’s fractal heap.</p> - </td> + <td><p>ID</p></td> + <td> + <p>This is a 7-byte sequence of bytes and is the heap ID for the + link record in the group’s fractal heap.</p> + </td> </tr> - </table> - </div> + </table> +</div> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Version 2 B-tree, Type 7 Record Layout - Shared Object Header Messages (Sub-Type 0 - Message in Heap) - </caption> +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Version 2 B-tree, Type 7 Record Layout - Shared + Object Header Messages (Sub-Type 0 - Message in Heap)</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td colspan>Message Location</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> + <td colspan>Message Location</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> </tr> <tr> - <td colspan="4">Hash</td> + <td colspan="4">Hash</td> </tr> <tr> - <td colspan="4">Reference Count</td> + <td colspan="4">Reference Count</td> </tr> <tr> - <td colspan="4"><br />Heap ID <em>(8 bytes)</em><br /><br /></td> + <td colspan="4"><br />Heap ID <em>(8 bytes)</em><br /> + <br /></td> </tr> - </table> - </div> + </table> +</div> - <br /> - <div align="center"> - <table class="desc"> +<br /> +<div align="center"> + <table class="desc"> <tr> - <th width="30%">Field Name</th> - <th>Description</th> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Message Location</p></td> - <td> - <p>This field Indicates the location where the message is stored: - <table class="list"> - <tr> - <th width="20%" align="center">Value</th> - <th width="80%" align="left">Description</th> - </tr> - <tr> - <td align="center">0</td> - <td>Shared message is stored in shared message index heap. - </td> - </tr> - <tr> - <td align="center">1</td> - <td>Shared message is stored in object header. - </td> - </tr> - </table></p> - </td> + <td><p>Message Location</p></td> + <td> + <p>This field Indicates the location where the message is + stored:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Value</th> + <th width="80%" align="left">Description</th> + </tr> + <tr> + <td align="center">0</td> + <td>Shared message is stored in shared message index heap.</td> + </tr> + <tr> + <td align="center">1</td> + <td>Shared message is stored in object header.</td> + </tr> + </table> + <p></p> + </td> </tr> <tr> - <td><p>Hash</p></td> - <td> - <p>This field is hash value of the shared message. The hash - value is the Jenkins’ lookup3 checksum algorithm applied to - the shared message.</p> - </td> + <td><p>Hash</p></td> + <td> + <p>This field is hash value of the shared message. The hash + value is the Jenkins’ lookup3 checksum algorithm applied to + the shared message.</p> + </td> </tr> <tr> - <td><p>Reference Count</p></td> - <td> - <p>The number of objects which reference this message.</p> - </td> + <td><p>Reference Count</p></td> + <td> + <p>The number of objects which reference this message.</p> + </td> </tr> <tr> - <td><p>Heap ID</p></td> - <td> - <p>This is an 8-byte sequence of bytes and is the heap ID for the - shared message in the shared message index’s fractal heap.</p> - </td> + <td><p>Heap ID</p></td> + <td> + <p>This is an 8-byte sequence of bytes and is the heap ID for + the shared message in the shared message index’s fractal + heap.</p> + </td> </tr> - </table> - </div> + </table> +</div> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Version 2 B-tree, Type 7 Record Layout - Shared Object Header Messages (Sub-Type 1 - Message in Object Header) - </caption> +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Version 2 B-tree, Type 7 Record Layout - Shared + Object Header Messages (Sub-Type 1 - Message in Object Header)</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td colspan>Message Location</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> + <td colspan>Message Location</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> </tr> <tr> - <td colspan="4">Hash</td> + <td colspan="4">Hash</td> </tr> <tr> - <td>Reserved (zero)</td> - <td>Message Type</td> - <td colspan="2">Object Header Index</td> + <td>Reserved (zero)</td> + <td>Message Type</td> + <td colspan="2">Object Header Index</td> </tr> <tr> - <td colspan="4"><br />Object Header Address<sup>O</sup><br /><br /></td> + <td colspan="4"><br />Object Header Address<sup>O</sup><br /> + <br /></td> </tr> - </table> + </table> - <table class="note"> + <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> - </table> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> + </table> - </div> +</div> - <br /> - <div align="center"> - <table class="desc"> +<br /> +<div align="center"> + <table class="desc"> <tr> - <th width="30%">Field Name</th> - <th>Description</th> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Message Location</p></td> - <td> - <p>This field Indicates the location where the message is stored: - <table class="list"> - <tr> - <th width="20%" align="center">Value</th> - <th width="80%" align="left">Description</th> - </tr> - <tr> - <td align="center">0</td> - <td>Shared message is stored in shared message index heap. - </td> - </tr> - <tr> - <td align="center">1</td> - <td>Shared message is stored in object header. - </td> - </tr> - </table></p> - </td> + <td><p>Message Location</p></td> + <td> + <p>This field Indicates the location where the message is + stored:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Value</th> + <th width="80%" align="left">Description</th> + </tr> + <tr> + <td align="center">0</td> + <td>Shared message is stored in shared message index heap.</td> + </tr> + <tr> + <td align="center">1</td> + <td>Shared message is stored in object header.</td> + </tr> + </table> + <p></p> + </td> </tr> <tr> - <td><p>Hash</p></td> - <td> - <p>This field is hash value of the shared message. The hash - value is the Jenkins’ lookup3 checksum algorithm applied to - the shared message.</p> - </td> + <td><p>Hash</p></td> + <td> + <p>This field is hash value of the shared message. The hash + value is the Jenkins’ lookup3 checksum algorithm applied to + the shared message.</p> + </td> </tr> <tr> - <td><p>Message Type</p></td> - <td> - <p>The object header message type of the shared message.</p> - </td> + <td><p>Message Type</p></td> + <td> + <p>The object header message type of the shared message.</p> + </td> </tr> <tr> - <td><p>Object Header Index</p></td> - <td> - <p>This field indicates that the shared message is the n<sup>th</sup> message - of its type in the specified object header.</p> - </td> + <td><p>Object Header Index</p></td> + <td> + <p> + This field indicates that the shared message is the n<sup>th</sup> + message of its type in the specified object header. + </p> + </td> </tr> <tr> - <td><p>Object Header Address</p></td> - <td> - <p>The address of the object header containing the shared message.</p> - </td> + <td><p>Object Header Address</p></td> + <td> + <p>The address of the object header containing the shared + message.</p> + </td> </tr> - </table> - </div> + </table> +</div> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Version 2 B-tree, Type 8 Record Layout - Attribute Name for Indexed Attributes - </caption> +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Version 2 B-tree, Type 8 Record Layout - Attribute + Name for Indexed Attributes</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td colspan="4"><br />Heap ID <em>(8 bytes)</em><br /><br /></td> + <td colspan="4"><br />Heap ID <em>(8 bytes)</em><br /> + <br /></td> </tr> <tr> - <td colspan>Message Flags</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> + <td colspan>Message Flags</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> </tr> <tr> - <td colspan="4">Creation Order</td> + <td colspan="4">Creation Order</td> </tr> <tr> - <td colspan="4">Hash of Name</td> + <td colspan="4">Hash of Name</td> </tr> - </table> - </div> + </table> +</div> - <br /> - <div align="center"> - <table class="desc"> +<br /> +<div align="center"> + <table class="desc"> <tr> - <th width="30%">Field Name</th> - <th>Description</th> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Heap ID</p></td> - <td> - <p>This is an 8-byte sequence of bytes and is the heap ID for the - attribute in the object’s attribute fractal heap.</p> - </td> + <td><p>Heap ID</p></td> + <td> + <p>This is an 8-byte sequence of bytes and is the heap ID for + the attribute in the object’s attribute fractal heap.</p> + </td> </tr> <tr> - <td><p>Message Flags</p></td> - <td><p>The object header message flags for the attribute message.</p> - </td> + <td><p>Message Flags</p></td> + <td><p>The object header message flags for the attribute + message.</p></td> </tr> <tr> - <td><p>Creation Order</p></td> - <td> - <p>This field is the creation order value for the attribute. - </p> - </td> + <td><p>Creation Order</p></td> + <td> + <p>This field is the creation order value for the attribute.</p> + </td> </tr> <tr> - <td><p>Hash</p></td> - <td> - <p>This field is hash value of the name for the attribute. The hash - value is the Jenkins’ lookup3 checksum algorithm applied to - the attribute’s name. - </p> - </td> + <td><p>Hash</p></td> + <td> + <p>This field is hash value of the name for the attribute. The + hash value is the Jenkins’ lookup3 checksum algorithm applied + to the attribute’s name.</p> + </td> </tr> - </table> - </div> + </table> +</div> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Version 2 B-tree, Type 9 Record Layout- Creation Order for Indexed Attributes - </caption> +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Version 2 B-tree, Type 9 Record Layout- Creation + Order for Indexed Attributes</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td colspan="4"><br />Heap ID <em>(8 bytes)</em><br /><br /></td> + <td colspan="4"><br />Heap ID <em>(8 bytes)</em><br /> + <br /></td> </tr> <tr> - <td colspan>Message Flags</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> + <td colspan>Message Flags</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> </tr> <tr> - <td colspan="4">Creation Order</td> + <td colspan="4">Creation Order</td> </tr> - </table> - </div> + </table> +</div> - <br /> - <div align="center"> - <table class="desc"> +<br /> +<div align="center"> + <table class="desc"> <tr> - <th width="30%">Field Name</th> - <th>Description</th> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Heap ID</p></td> - <td> - <p>This is an 8-byte sequence of bytes and is the heap ID for the - attribute in the object’s attribute fractal heap.</p> - </td> + <td><p>Heap ID</p></td> + <td> + <p>This is an 8-byte sequence of bytes and is the heap ID for + the attribute in the object’s attribute fractal heap.</p> + </td> </tr> <tr> - <td><p>Message Flags</p></td> - <td> - <p>The object header message flags for the attribute message.</p> - </td> + <td><p>Message Flags</p></td> + <td> + <p>The object header message flags for the attribute message.</p> + </td> </tr> <tr> - <td><p>Creation Order</p></td> - <td> - <p>This field is the creation order value for the attribute. - </p> - </td> + <td><p>Creation Order</p></td> + <td> + <p>This field is the creation order value for the attribute.</p> + </td> </tr> - </table> - </div> + </table> +</div> <br /> -<h3><a name="SymbolTable"> -III.B. Disk Format: Level 1B - Group Symbol Table Nodes</a></h3> - - <p>A group is an object internal to the file that allows - arbitrary nesting of objects within the file (including other groups). - A group maps a set of link names in the group to a set of relative - file addresses of objects in the file. Certain metadata for an object to - which the group points can be cached in the group’s symbol table entry in - addition to being in the object’s header.</p> - - <p>An HDF5 object name space can be stored hierarchically by - partitioning the name into components and storing each - component as a link in a group. The link for a - non-ultimate component points to the group containing - the next component. The link for the last - component points to the object being named.</p> +<h3> + <a name="SymbolTable"> III.B. Disk Format: Level 1B - Group Symbol + Table Nodes</a> +</h3> + +<p>A group is an object internal to the file that allows arbitrary + nesting of objects within the file (including other groups). A group + maps a set of link names in the group to a set of relative file + addresses of objects in the file. Certain metadata for an object to + which the group points can be cached in the group’s symbol table + entry in addition to being in the object’s header.</p> + +<p>An HDF5 object name space can be stored hierarchically by + partitioning the name into components and storing each component as a + link in a group. The link for a non-ultimate component points to the + group containing the next component. The link for the last component + points to the object being named.</p> + +<p> + One implementation of a group is a collection of symbol table nodes + indexed by a B-link tree. Each symbol table node contains entries for + one or more links. If an attempt is made to add a link to an already + full symbol table node containing 2<em>K</em> entries, then the node is + split and one node contains <em>K</em> symbols and the other contains <em>K</em>+1 + symbols. +</p> - <p>One implementation of a group is a collection of symbol table nodes - indexed by a B-link tree. Each symbol table node contains entries - for one or more links. If an attempt is made to add a link to an already - full symbol table node containing 2<em>K</em> entries, then the node is - split and one node contains <em>K</em> symbols and the other contains - <em>K</em>+1 symbols.</p> - - <div align="center"> - <table class="format"> - <caption> - Symbol Table Node (A Leaf of a B-link tree) - </caption> +<div align="center"> + <table class="format"> + <caption>Symbol Table Node (A Leaf of a B-link tree)</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td colspan="4">Signature</td> + <td colspan="4">Signature</td> </tr> <tr> - <td>Version Number</td> - <td>Reserved (zero)</td> - <td colspan="2">Number of Symbols</td> + <td>Version Number</td> + <td>Reserved (zero)</td> + <td colspan="2">Number of Symbols</td> </tr> <tr> - <td colspan="4"><br /><br />Group Entries<br /><br /><br /></td> + <td colspan="4"><br /> + <br />Group Entries<br /> + <br /> + <br /></td> </tr> - </table> - </div> + </table> +</div> - <br /> - <div align="center"> - <table class="desc"> +<br /> +<div align="center"> + <table class="desc"> <tr> - <th width="30%">Field Name</th> - <th>Description</th> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Signature</p></td> - <td> - <p>The ASCII character string “<code>SNOD</code>” is - used to indicate the - beginning of a symbol table node. This gives file - consistency checking utilities a better chance of - reconstructing a damaged file. - </p> - </td> + <td><p>Signature</p></td> + <td> + <p> + The ASCII character string “ + <code>SNOD</code> + ” is used to indicate the beginning of a symbol table node. + This gives file consistency checking utilities a better chance of + reconstructing a damaged file. + </p> + </td> </tr> <tr> - <td><p>Version Number</p></td> - <td> - <p>The version number for the symbol table node. This - document describes version 1. (There is no version ‘0’ - of the symbol table node) - </p> - </td> + <td><p>Version Number</p></td> + <td> + <p>The version number for the symbol table node. This document + describes version 1. (There is no version ‘0’ of the + symbol table node)</p> + </td> </tr> <tr> - <td><p>Number of Entries</p></td> - <td> - <p>Although all symbol table nodes have the same length, - most contain fewer than the maximum possible number of - link entries. This field indicates how many entries - contain valid data. The valid entries are packed at the - beginning of the symbol table node while the remaining - entries contain undefined values. - </p> - </td> + <td><p>Number of Entries</p></td> + <td> + <p>Although all symbol table nodes have the same length, most + contain fewer than the maximum possible number of link entries. + This field indicates how many entries contain valid data. The valid + entries are packed at the beginning of the symbol table node while + the remaining entries contain undefined values.</p> + </td> </tr> <tr> - <td><p>Symbol Table Entries</p></td> - <td> - <p>Each link has an entry in the symbol table node. - The format of the entry is described below. - There are 2<em>K</em> entries in each group node, where - <em>K</em> is the “Group Leaf Node K” value from the - <a href="#Superblock">superblock</a>. - </p> - </td> + <td><p>Symbol Table Entries</p></td> + <td> + <p> + Each link has an entry in the symbol table node. The format of the + entry is described below. There are 2<em>K</em> entries in each + group node, where <em>K</em> is the “Group Leaf Node K” + value from the <a href="#Superblock">superblock</a>. + </p> + </td> </tr> - </table> - </div> + </table> +</div> <br /> -<h3><a name="SymbolTableEntry"> -III.C. Disk Format: Level 1C - Symbol Table Entry </a></h3> +<h3> + <a name="SymbolTableEntry"> III.C. Disk Format: Level 1C - Symbol + Table Entry </a> +</h3> - <p>Each symbol table entry in a symbol table node is designed - to allow for very fast browsing of stored objects. - Toward that design goal, the symbol table entries - include space for caching certain constant metadata from the - object header.</p> +<p>Each symbol table entry in a symbol table node is designed to + allow for very fast browsing of stored objects. Toward that design + goal, the symbol table entries include space for caching certain + constant metadata from the object header.</p> - <div align="center"> - <table class="format"> - <caption> - Symbol Table Entry - </caption> +<div align="center"> + <table class="format"> + <caption>Symbol Table Entry</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td colspan="4"><br />Link Name Offset<sup>O</sup><br /><br /></td> + <td colspan="4"><br />Link Name Offset<sup>O</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Object Header Address<sup>O</sup><br /><br /></td> + <td colspan="4"><br />Object Header Address<sup>O</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4">Cache Type</td> + <td colspan="4">Cache Type</td> </tr> <tr> - <td colspan="4">Reserved (zero)</td> + <td colspan="4">Reserved (zero)</td> </tr> <tr> - <td colspan="4"><br /><br />Scratch-pad Space (16 bytes)<br /><br /><br /></td> + <td colspan="4"><br /> + <br />Scratch-pad Space (16 bytes)<br /> + <br /> + <br /></td> </tr> - </table> + </table> - <table class="note"> + <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> - </table> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> + </table> - </div> +</div> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Link Name Offset</p></td> - <td> - <p>This is the byte offset into the group’s local - heap for the name of the link. The name is null - terminated. - </p> - </td> - </tr> - - <tr> - <td><p>Object Header Address</p></td> - <td> - <p>Every object has an object header which serves as a - permanent location for the object’s metadata. In addition - to appearing in the object header, some of the object’s metadata - can be cached in the scratch-pad space. - </p> - </td> - </tr> - - <tr> - <td><p>Cache Type</p></td> - <td> - <p>The cache type is determined from the object header. - It also determines the format for the scratch-pad space: - - <table class="list"> - <tr> - <th width="20%" align="center">Type</th> - <th width="80%" align="left">Description</th> - </tr> - <tr> - <td align="center">0</td> - <td>No data is cached by the group entry. This - is guaranteed to be the case when an object header - has a link count greater than one. - </td> - </tr> - <tr> - <td align="center">1</td> - <td>Group object header metadata is cached in the - scratch-pad space. This implies that the symbol table - entry refers to another group. - </td> - </tr> - <tr> - <td align="center">2</td> - <td>The entry is a symbolic link. The first four bytes - of the scratch-pad space are the offset into the local - heap for the link value. The object header address - will be undefined. - </td> - </tr> - </table></p> - - </td> - </tr> - - <tr> - <td><p>Reserved</p></td> - <td> - <p>These four bytes are present so that the scratch-pad - space is aligned on an eight-byte boundary. They are - always set to zero. - </p> - </td> - </tr> - - <tr> - <td><p>Scratch-pad Space</p></td> - <td> - <p>This space is used for different purposes, depending - on the value of the Cache Type field. Any metadata - about an object represented in the scratch-pad - space is duplicated in the object header for that - object. - </p> - <p> - Furthermore, no data is cached in the group - entry scratch-pad space if the object header for - the object has a link count greater than one. - </p> - </td> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Link Name Offset</p></td> + <td> + <p>This is the byte offset into the group’s local heap for + the name of the link. The name is null terminated.</p> + </td> + </tr> + + <tr> + <td><p>Object Header Address</p></td> + <td> + <p>Every object has an object header which serves as a permanent + location for the object’s metadata. In addition to appearing + in the object header, some of the object’s metadata can be + cached in the scratch-pad space.</p> + </td> </tr> - </table> - </div> + + <tr> + <td><p>Cache Type</p></td> + <td> + <p>The cache type is determined from the object header. It also + determines the format for the scratch-pad space:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Type</th> + <th width="80%" align="left">Description</th> + </tr> + <tr> + <td align="center">0</td> + <td>No data is cached by the group entry. This is guaranteed + to be the case when an object header has a link count greater + than one.</td> + </tr> + <tr> + <td align="center">1</td> + <td>Group object header metadata is cached in the scratch-pad + space. This implies that the symbol table entry refers to another + group.</td> + </tr> + <tr> + <td align="center">2</td> + <td>The entry is a symbolic link. The first four bytes of the + scratch-pad space are the offset into the local heap for the link + value. The object header address will be undefined.</td> + </tr> + </table> + <p></p> + + </td> + </tr> + + <tr> + <td><p>Reserved</p></td> + <td> + <p>These four bytes are present so that the scratch-pad space is + aligned on an eight-byte boundary. They are always set to zero.</p> + </td> + </tr> + + <tr> + <td><p>Scratch-pad Space</p></td> + <td> + <p>This space is used for different purposes, depending on the + value of the Cache Type field. Any metadata about an object + represented in the scratch-pad space is duplicated in the object + header for that object.</p> + <p>Furthermore, no data is cached in the group entry scratch-pad + space if the object header for the object has a link count greater + than one.</p> + </td> + </tr> + </table> +</div> <br /> <h4>Format of the Scratch-pad Space</h4> - <p>The symbol table entry scratch-pad space is formatted - according to the value in the Cache Type field.</p> +<p>The symbol table entry scratch-pad space is formatted according + to the value in the Cache Type field.</p> - <p>If the Cache Type field contains the value zero - <code>(0)</code> then no information is - stored in the scratch-pad space.</p> +<p> + If the Cache Type field contains the value zero + <code>(0)</code> + then no information is stored in the scratch-pad space. +</p> - <p>If the Cache Type field contains the value one - <code>(1)</code>, then the scratch-pad space - contains cached metadata for another object header - in the following format:</p> +<p> + If the Cache Type field contains the value one + <code>(1)</code> + , then the scratch-pad space contains cached metadata for another + object header in the following format: +</p> - <div align="center"> - <table class="format"> - <caption> - Object Header Scratch-pad Format - </caption> +<div align="center"> + <table class="format"> + <caption>Object Header Scratch-pad Format</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td colspan="4"><br />Address of B-tree<sup>O</sup><br /><br /></td> + <td colspan="4"><br />Address of B-tree<sup>O</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Address of Name Heap<sup>O</sup><br /><br /></td> + <td colspan="4"><br />Address of Name Heap<sup>O</sup><br /> + <br /></td> </tr> - </table> + </table> - <table class="note"> + <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> - </table> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> + </table> - </div> +</div> - <br /> - <div align="center"> - <table class="desc"> +<br /> +<div align="center"> + <table class="desc"> <tr> - <th width="30%">Field Name</th> - <th>Description</th> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Address of B-tree</p></td> - <td> - <p>This is the file address for the root of the - group’s B-tree. - </p> - </td> + <td><p>Address of B-tree</p></td> + <td> + <p>This is the file address for the root of the group’s + B-tree.</p> + </td> </tr> <tr> - <td><p>Address of Name Heap</p></td> - <td> - <p>This is the file address for the group’s local - heap, in which are stored the group’s symbol names. - </p> - </td> + <td><p>Address of Name Heap</p></td> + <td> + <p>This is the file address for the group’s local heap, in + which are stored the group’s symbol names.</p> + </td> </tr> - </table> - </div> + </table> +</div> - <br /> - <p>If the Cache Type field contains the value two - <code>(2)</code>, then the scratch-pad space - contains cached metadata for a symbolic link - in the following format:</p> +<br /> +<p> + If the Cache Type field contains the value two + <code>(2)</code> + , then the scratch-pad space contains cached metadata for a symbolic + link in the following format: +</p> - <div align="center"> - <table class="format"> - <caption> - Symbolic Link Scratch-pad Format - </caption> +<div align="center"> + <table class="format"> + <caption>Symbolic Link Scratch-pad Format</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td colspan="4">Offset to Link Value</td> + <td colspan="4">Offset to Link Value</td> </tr> - </table> - </div> + </table> +</div> - <br /> - <div align="center"> - <table class="desc"> +<br /> +<div align="center"> + <table class="desc"> <tr> - <th width="30%">Field Name</th> - <th>Description</th> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Offset to Link Value</p></td> - <td> - <p>The value of a symbolic link (that is, the name of the - thing to which it points) is stored in the local heap. - This field is the 4-byte offset into the local heap for - the start of the link value, which is null terminated. - </p> - </td> + <td><p>Offset to Link Value</p></td> + <td> + <p>The value of a symbolic link (that is, the name of the thing + to which it points) is stored in the local heap. This field is the + 4-byte offset into the local heap for the start of the link value, + which is null terminated.</p> + </td> </tr> - </table> - </div> + </table> +</div> <br /> -<h3><a name="LocalHeap"> -III.D. Disk Format: Level 1D - Local Heaps</a></h3> +<h3> + <a name="LocalHeap"> III.D. Disk Format: Level 1D - Local Heaps</a> +</h3> - <p>A local heap is a collection of small pieces of data that are particular - to a single object in the HDF5 file. Objects can be - inserted and removed from the heap at any time. - The address of a heap does not change once the heap is created. - For example, a group stores addresses of objects in symbol table nodes - with the names of links stored in the group’s local heap. - </p> +<p>A local heap is a collection of small pieces of data that are + particular to a single object in the HDF5 file. Objects can be inserted + and removed from the heap at any time. The address of a heap does not + change once the heap is created. For example, a group stores addresses + of objects in symbol table nodes with the names of links stored in the + group’s local heap.</p> - <div align="center"> - <table class="format"> - <caption> - Local Heap - </caption> +<div align="center"> + <table class="format"> + <caption>Local Heap</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td colspan="4">Signature</td> + <td colspan="4">Signature</td> </tr> <tr> - <td>Version</td> - <td colspan="3">Reserved (zero)</td> + <td>Version</td> + <td colspan="3">Reserved (zero)</td> </tr> <tr> - <td colspan="4"><br />Data Segment Size<sup>L</sup><br /><br /></td> + <td colspan="4"><br />Data Segment Size<sup>L</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Offset to Head of Free-list<sup>L</sup><br /><br /></td> + <td colspan="4"><br />Offset to Head of Free-list<sup>L</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Address of Data Segment<sup>O</sup><br /><br /></td> + <td colspan="4"><br />Address of Data Segment<sup>O</sup><br /> + <br /></td> </tr> - </table> + </table> - <table class="note"> + <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> <tr> - <td> </td> - <td> - (Items marked with an ‘L’ in the above table are of the size - specified in “Size of Lengths” field in the superblock.) - </td></tr> - </table> + <td> </td> + <td>(Items marked with an ‘L’ in the above table are + of the size specified in “Size of Lengths” field in the + superblock.)</td> + </tr> + </table> - </div> +</div> - <br /> - <div align="center"> - <table class="desc"> +<br /> +<div align="center"> + <table class="desc"> <tr> - <th width="30%">Field Name</th> - <th>Description</th> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Signature</p></td> - <td> - <p>The ASCII character string “<code>HEAP</code>” - is used to indicate the - beginning of a heap. This gives file consistency - checking utilities a better chance of reconstructing a - damaged file. - </p> - </td> + <td><p>Signature</p></td> + <td> + <p> + The ASCII character string “ + <code>HEAP</code> + ” is used to indicate the beginning of a heap. This gives + file consistency checking utilities a better chance of + reconstructing a damaged file. + </p> + </td> </tr> <tr> - <td><p>Version</p></td> - <td> - <p>Each local heap has its own version number so that new - heaps can be added to old files. This document - describes version zero (0) of the local heap. - </p> - </td> + <td><p>Version</p></td> + <td> + <p>Each local heap has its own version number so that new heaps + can be added to old files. This document describes version zero (0) + of the local heap.</p> + </td> </tr> <tr> - <td><p>Data Segment Size</p></td> - <td> - <p>The total amount of disk memory allocated for the heap - data. This may be larger than the amount of space - required by the objects stored in the heap. The extra - unused space in the heap holds a linked list of free blocks. - </p> - </td> + <td><p>Data Segment Size</p></td> + <td> + <p>The total amount of disk memory allocated for the heap data. + This may be larger than the amount of space required by the objects + stored in the heap. The extra unused space in the heap holds a + linked list of free blocks.</p> + </td> </tr> <tr> - <td><p>Offset to Head of Free-list</p></td> - <td> - <p>This is the offset within the heap data segment of the - first free block (or the - <a href="#UndefinedAddress">undefined address</a> if there is no - free block). The free block contains “Size of Lengths” bytes that - are the offset of the next free block (or the - value ‘1’ if this is the - last free block) followed by “Size of Lengths” bytes that store - the size of this free block. The size of the free block includes - the space used to store the offset of the next free block and - the size of the current block, making the minimum size of a free - block 2 * “Size of Lengths”. - </p> - </td> + <td><p>Offset to Head of Free-list</p></td> + <td> + <p> + This is the offset within the heap data segment of the first free + block (or the <a href="#UndefinedAddress">undefined address</a> if + there is no free block). The free block contains “Size of + Lengths” bytes that are the offset of the next free block (or + the value ‘1’ if this is the last free block) followed + by “Size of Lengths” bytes that store the size of this + free block. The size of the free block includes the space used to + store the offset of the next free block and the size of the current + block, making the minimum size of a free block 2 * “Size of + Lengths”. + </p> + </td> </tr> <tr> - <td><p>Address of Data Segment</p></td> - <td> - <p>The data segment originally starts immediately after - the heap header, but if the data segment must grow as a - result of adding more objects, then the data segment may - be relocated, in its entirety, to another part of the - file. - </p> - </td> + <td><p>Address of Data Segment</p></td> + <td> + <p>The data segment originally starts immediately after the heap + header, but if the data segment must grow as a result of adding + more objects, then the data segment may be relocated, in its + entirety, to another part of the file.</p> + </td> </tr> - </table> - </div> - - <p>Objects within a local heap should be aligned on an 8-byte boundary.</p> - -<br /> -<h3><a name="GlobalHeap"> -III.E. Disk Format: Level 1E - Global Heap</a></h3> - - <p>Each HDF5 file has a global heap which stores various types of - information which is typically shared between datasets. The - global heap was designed to satisfy these goals:</p> - - <ol type="A"> - <li>Repeated access to a heap object must be efficient without - resulting in repeated file I/O requests. Since global heap - objects will typically be shared among several datasets, it is - probable that the object will be accessed repeatedly.</li> - <li>Collections of related global heap objects should result in - fewer and larger I/O requests. For instance, a dataset of - object references will have a global heap object for each - reference. Reading the entire set of object references - should result in a few large I/O requests instead of one small - I/O request for each reference.</li> - <li>It should be possible to remove objects from the global heap - and the resulting file hole should be eligible to be reclaimed - for other uses.</li> - </ol> - - - <p>The implementation of the heap makes use of the memory management - already available at the file level and combines that with a new - object called a <em>collection</em> to achieve goal B. The global heap - is the set of all collections. Each global heap object belongs to - exactly one collection and each collection contains one or more global - heap objects. For the purposes of disk I/O and caching, a collection is - treated as an atomic object, addressing goal A. - </p> - - <p>When a global heap object is deleted from a collection (which occurs - when its reference count falls to zero), objects located after the - deleted object in the collection are packed down toward the beginning - of the collection and the collection’s global heap object 0 is created - (if possible) or its size is increased to account for the recently - freed space. There are no gaps between objects in each collection, - with the possible exception of the final space in the collection, if - it is not large enough to hold the header for the collection’s global - heap object 0. These features address goal C. - </p> - - <p>The HDF5 Library creates global heap collections as needed, so there may - be multiple collections throughout the file. The set of all of them is - abstractly called the “global heap”, although they do not actually link - to each other, and there is no global place in the file where you can - discover all of the collections. The collections are found simply by - finding a reference to one through another object in the file. For - example, data of variable-length datatype elements is stored in the - global heap and is accessed via a global heap ID. The format for - global heap IDs is described at the end of this section. - </p> - - <div align="center"> - <table class="format"> - <caption> - A Global Heap Collection - </caption> + </table> +</div> + +<p>Objects within a local heap should be aligned on an 8-byte + boundary.</p> + +<br /> +<h3> + <a name="GlobalHeap"> III.E. Disk Format: Level 1E - Global Heap</a> +</h3> + +<p>Each HDF5 file has a global heap which stores various types of + information which is typically shared between datasets. The global heap + was designed to satisfy these goals:</p> + +<ol type="A"> + <li>Repeated access to a heap object must be efficient without + resulting in repeated file I/O requests. Since global heap objects + will typically be shared among several datasets, it is probable that + the object will be accessed repeatedly.</li> + <li>Collections of related global heap objects should result in + fewer and larger I/O requests. For instance, a dataset of object + references will have a global heap object for each reference. Reading + the entire set of object references should result in a few large I/O + requests instead of one small I/O request for each reference.</li> + <li>It should be possible to remove objects from the global heap + and the resulting file hole should be eligible to be reclaimed for + other uses.</li> +</ol> + + +<p> + The implementation of the heap makes use of the memory management + already available at the file level and combines that with a new object + called a <em>collection</em> to achieve goal B. The global heap is the + set of all collections. Each global heap object belongs to exactly one + collection and each collection contains one or more global heap + objects. For the purposes of disk I/O and caching, a collection is + treated as an atomic object, addressing goal A. +</p> + +<p>When a global heap object is deleted from a collection (which + occurs when its reference count falls to zero), objects located after + the deleted object in the collection are packed down toward the + beginning of the collection and the collection’s global heap + object 0 is created (if possible) or its size is increased to account + for the recently freed space. There are no gaps between objects in each + collection, with the possible exception of the final space in the + collection, if it is not large enough to hold the header for the + collection’s global heap object 0. These features address goal C. +</p> + +<p>The HDF5 Library creates global heap collections as needed, so + there may be multiple collections throughout the file. The set of all + of them is abstractly called the “global heap”, although + they do not actually link to each other, and there is no global place + in the file where you can discover all of the collections. The + collections are found simply by finding a reference to one through + another object in the file. For example, data of variable-length + datatype elements is stored in the global heap and is accessed via a + global heap ID. The format for global heap IDs is described at the end + of this section.</p> + +<div align="center"> + <table class="format"> + <caption>A Global Heap Collection</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td colspan="4">Signature</td> + <td colspan="4">Signature</td> </tr> <tr> - <td>Version</td> - <td colspan="3">Reserved (zero)</td> + <td>Version</td> + <td colspan="3">Reserved (zero)</td> </tr> <tr> - <td colspan="4"><br />Collection Size<sup>L</sup><br /><br /></td> + <td colspan="4"><br />Collection Size<sup>L</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Global Heap Object 1<br /><br /></td> + <td colspan="4"><br />Global Heap Object 1<br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Global Heap Object 2<br /><br /></td> + <td colspan="4"><br />Global Heap Object 2<br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />...<br /><br /></td> + <td colspan="4"><br />...<br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Global Heap Object <em>N</em><br /><br /></td> + <td colspan="4"><br />Global Heap Object <em>N</em><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Global Heap Object 0 (free space)<br /><br /></td> + <td colspan="4"><br />Global Heap Object 0 (free space)<br /> + <br /></td> </tr> - </table> + </table> - <table class="note"> + <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘L’ in the above table are of the size - specified in “Size of Lengths” field in the superblock.) - </td></tr> - </table> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘L’ in the + above table are of the size specified in “Size of + Lengths” field in the superblock.)</td> + </tr> + </table> - </div> +</div> - <br /> - <div align="center"> - <table class="desc"> +<br /> +<div align="center"> + <table class="desc"> <tr> - <th width="30%">Field Name</th> - <th>Description</th> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Signature</p></td> - <td> - <p>The ASCII character string “<code>GCOL</code>” - is used to indicate the - beginning of a collection. This gives file consistency - checking utilities a better chance of reconstructing a - damaged file. - </p> - </td> + <td><p>Signature</p></td> + <td> + <p> + The ASCII character string “ + <code>GCOL</code> + ” is used to indicate the beginning of a collection. This + gives file consistency checking utilities a better chance of + reconstructing a damaged file. + </p> + </td> </tr> <tr> - <td><p>Version</p></td> - <td> - <p>Each collection has its own version number so that new - collections can be added to old files. This document - describes version one (1) of the collections (there is no - version zero (0)). - </p> - </td> + <td><p>Version</p></td> + <td> + <p>Each collection has its own version number so that new + collections can be added to old files. This document describes + version one (1) of the collections (there is no version zero (0)). + </p> + </td> </tr> <tr> - <td><p>Collection Size</p></td> - <td> - <p>This is the size in bytes of the entire collection - including this field. The default (and minimum) - collection size is 4096 bytes which is a typical file - system block size. This allows for 127 16-byte heap - objects plus their overhead (the collection header of 16 bytes - and the 16 bytes of information about each heap object). - </p> - </td> + <td><p>Collection Size</p></td> + <td> + <p>This is the size in bytes of the entire collection including + this field. The default (and minimum) collection size is 4096 bytes + which is a typical file system block size. This allows for 127 + 16-byte heap objects plus their overhead (the collection header of + 16 bytes and the 16 bytes of information about each heap object).</p> + </td> </tr> <tr> - <td><p>Global Heap Object 1 through <em>N</em></p></td> - <td> - <p>The objects are stored in any order with no - intervening unused space. - </p> - </td> + <td><p> + Global Heap Object 1 through <em>N</em> + </p></td> + <td> + <p>The objects are stored in any order with no intervening + unused space.</p> + </td> </tr> <tr> - <td><p>Global Heap Object 0</p></td> - <td> - <p>Global Heap Object 0 (zero), when present, represents the free - space in the collection. Free space always appears at the end of - the collection. If the free space is too small to store the header - for Object 0 (described below) then the header is implied and the - collection contains no free space. - </p> - </td> + <td><p>Global Heap Object 0</p></td> + <td> + <p>Global Heap Object 0 (zero), when present, represents the + free space in the collection. Free space always appears at the end + of the collection. If the free space is too small to store the + header for Object 0 (described below) then the header is implied + and the collection contains no free space.</p> + </td> </tr> - </table> - </div> + </table> +</div> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Global Heap Object - </caption> +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Global Heap Object</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td colspan="2">Heap Object Index</td> - <td colspan="2">Reference Count</td> + <td colspan="2">Heap Object Index</td> + <td colspan="2">Reference Count</td> </tr> <tr> - <td colspan="4">Reserved (zero)</td> + <td colspan="4">Reserved (zero)</td> </tr> <tr> - <td colspan="4"><br />Object Size<sup>L</sup><br /><br /></td> + <td colspan="4"><br />Object Size<sup>L</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Object Data<br /><br /></td> + <td colspan="4"><br />Object Data<br /> + <br /></td> </tr> - </table> + </table> - <table class="note"> + <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘L’ in the above table are of the size - specified in “Size of Lengths” field in the superblock.) - </td></tr> - </table> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘L’ in the + above table are of the size specified in “Size of + Lengths” field in the superblock.)</td> + </tr> + </table> - </div> +</div> - <br /> - <div align="center"> - <table class="desc"> +<br /> +<div align="center"> + <table class="desc"> <tr> - <th width="30%">Field Name</th> - <th>Description</th> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Heap Object Index</p></td> - <td> - <p>Each object has a unique identification number within a - collection. The identification numbers are chosen so that - new objects have the smallest value possible with the - exception that the identifier <code>0</code> always refers to the - object which represents all free space within the - collection. - </p> - </td> + <td><p>Heap Object Index</p></td> + <td> + <p> + Each object has a unique identification number within a collection. + The identification numbers are chosen so that new objects have the + smallest value possible with the exception that the identifier + <code>0</code> + always refers to the object which represents all free space within + the collection. + </p> + </td> </tr> <tr> - <td><p>Reference Count</p></td> - <td> - <p>All heap objects have a reference count field. An - object which is referenced from some other part of the - file will have a positive reference count. The reference - count for Object 0 is always zero. - </p> - </td> + <td><p>Reference Count</p></td> + <td> + <p>All heap objects have a reference count field. An object + which is referenced from some other part of the file will have a + positive reference count. The reference count for Object 0 is + always zero.</p> + </td> </tr> <tr> - <td><p>Reserved</p></td> - <td> - <p>Zero padding to align next field on an 8-byte boundary. - </p> - </td> + <td><p>Reserved</p></td> + <td> + <p>Zero padding to align next field on an 8-byte boundary.</p> + </td> </tr> <tr> - <td><p>Object Size</p></td> - <td> - <p>This is the size of the object data stored for the object. - The actual storage space allocated for the object data is rounded - up to a multiple of eight. - </p> - </td> + <td><p>Object Size</p></td> + <td> + <p>This is the size of the object data stored for the object. + The actual storage space allocated for the object data is rounded + up to a multiple of eight.</p> + </td> </tr> <tr> - <td><p>Object Data</p></td> - <td> - <p>The object data is treated as a one-dimensional array - of bytes to be interpreted by the caller. - </p> - </td> + <td><p>Object Data</p></td> + <td> + <p>The object data is treated as a one-dimensional array of + bytes to be interpreted by the caller.</p> + </td> </tr> - </table> + </table> - </div> +</div> - <br /> - <p> - The format for the ID used to locate an object in the global heap is - described here:</p> +<br /> +<p>The format for the ID used to locate an object in the global heap + is described here:</p> - <div align="center"> - <table class="format"> - <caption> - Global Heap ID - </caption> +<div align="center"> + <table class="format"> + <caption>Global Heap ID</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td colspan="4"><br />Collection Address<sup>O</sup><br /><br /></td> + <td colspan="4"><br />Collection Address<sup>O</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4">Object Index</td> + <td colspan="4">Object Index</td> </tr> - </table> + </table> - <table class="note"> + <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> - </table> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> + </table> - </div> +</div> - <br /> - <div align="center"> - <table class="desc"> +<br /> +<div align="center"> + <table class="desc"> <tr> - <th width="30%">Field Name</th> - <th>Description</th> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Collection Address</p></td> - <td> - <p>This field is the address of the global heap collection - where the data object is stored. - </p> - </td> + <td><p>Collection Address</p></td> + <td> + <p>This field is the address of the global heap collection where + the data object is stored.</p> + </td> </tr> <tr> - <td><p>ID</p></td> - <td> - <p>This field is the index of the data object within the - global heap collection. - </p> - </td> + <td><p>ID</p></td> + <td> + <p>This field is the index of the data object within the global + heap collection.</p> + </td> </tr> - </table> - </div> - - -<br /> -<h3><a name="FractalHeap"> -III.F. Disk Format: Level 1F - Fractal Heap</a></h3> - - <p> - Each fractal heap consists of a header and zero or more direct and - indirect blocks (described below). The header contains general - information as well as - initialization parameters for the doubling table. The <em>Root - Block Address</em> in the header points to the first direct or - indirect block in the heap. - </p> - - <p> - Fractal heaps are based on a data structure called a <em>doubling - table</em>. A doubling table provides a mechanism for quickly - extending an array-like data structure that minimizes the number of - empty blocks in the heap, while retaining very fast lookup of any - element within the array. More information on fractal heaps and - doubling tables can be found in the RFC - “<a href="Supplements/FractalHeap/PrivateHeap.pdf">Private - Heaps in HDF5</a>.” - </p> - - <p> - The fractal heap implements the doubling table structure with - indirect and direct blocks. - Indirect blocks in the heap do not actually contain data for - objects in the heap, their “size” is abstract - - they represent the indexing structure for locating the - direct blocks in the doubling table. - Direct blocks - contain the actual data for objects stored in the heap. - </p> - - <p> - All indirect blocks have a constant number of block entries in each - row, called the <em>width</em> of the doubling table (stored in - the heap header). - - The number - of rows for each indirect block in the heap is determined by the - size of the block that the indirect block represents in the - doubling table (calculation of this is shown below) and is - constant, except for the “root” - indirect block, which expands and shrinks its number of rows as - needed. - </p> - - <p> - Blocks in the first <em>two</em> rows of an indirect block - are <em>Starting Block Size</em> number of bytes in size, - and the blocks in each subsequent row are twice the size of - the blocks in the previous row. In other words, blocks in - the third row are twice the <em>Starting Block Size</em>, - blocks in the fourth row are four times the - <em>Starting Block Size</em>, and so on. Entries for - blocks up to the <em>Maximum Direct Block Size</em> point to - direct blocks, and entries for blocks greater than that size - point to further indirect blocks (which have their own - entries for direct and indirect blocks). - </p> - - <p> - The number of rows of blocks, <em>nrows</em>, in an - indirect block of size <em>iblock_size</em> is given by the - following expression: - <br /> <br /> - <em>nrows</em> = (log<sub>2</sub>(<em>iblock_size</em>) - - log<sub>2</sub>(<em><Starting Block Size></em> * - <em><Width></em>)) + 1 - </p> - - <p> - The maximum number of rows of direct blocks, <em>max_dblock_rows</em>, - in any indirect block of a fractal heap is given by the - following expression: - <br /> <br /> - <em>max_dblock_rows</em> = - (log<sub>2</sub>(<em><Max. Direct Block Size></em>) - - log<sub>2</sub>(<em><Starting Block Size></em>)) + 2 - </p> - - <p> - Using the computed values for <em>nrows</em> and - <em>max_dblock_rows</em>, along with the <em>Width</em> of the - doubling table, the number of direct and indirect block entries - (<em>K</em> and <em>N</em> in the indirect block description, below) - in an indirect block can be computed: - <br /> <br /> - <em>K</em> = MIN(<em>nrows</em>, <em>max_dblock_rows</em>) * - <em>Width</em> - - <br /> <br /> - If <em>nrows</em> is less than or equal to <em>max_dblock_rows</em>, - <em>N</em> is 0. Otherwise, <em>N</em> is simply computed: - <br /> <br /> - <em>N</em> = <em>K</em> - (<em>max_dblock_rows</em> * - <em>Width</em>) - </p> - - <p> - The size indirect blocks on disk is determined by the number - of rows in the indirect block (computed above). The size of direct - blocks on disk is exactly the size of the block in the doubling - table. - </p> - - <div align="center"> - <table class="format"> - <caption> - Fractal Heap Header - </caption> + </table> +</div> + + +<br /> +<h3> + <a name="FractalHeap"> III.F. Disk Format: Level 1F - Fractal Heap</a> +</h3> + +<p> + Each fractal heap consists of a header and zero or more direct and + indirect blocks (described below). The header contains general + information as well as initialization parameters for the doubling + table. The <em>Root Block Address</em> in the header points to the + first direct or indirect block in the heap. +</p> + +<p> + Fractal heaps are based on a data structure called a <em>doubling + table</em>. A doubling table provides a mechanism for quickly extending an + array-like data structure that minimizes the number of empty blocks in + the heap, while retaining very fast lookup of any element within the + array. More information on fractal heaps and doubling tables can be + found in the RFC “<a + href="Supplements/FractalHeap/PrivateHeap.pdf">Private Heaps in + HDF5</a>.” +</p> + +<p>The fractal heap implements the doubling table structure with + indirect and direct blocks. Indirect blocks in the heap do not actually + contain data for objects in the heap, their “size” is + abstract - they represent the indexing structure for locating the + direct blocks in the doubling table. Direct blocks contain the actual + data for objects stored in the heap.</p> + +<p> + All indirect blocks have a constant number of block entries in each + row, called the <em>width</em> of the doubling table (stored in the + heap header). The number of rows for each indirect block in the heap is + determined by the size of the block that the indirect block represents + in the doubling table (calculation of this is shown below) and is + constant, except for the “root” indirect block, which + expands and shrinks its number of rows as needed. +</p> + +<p> + Blocks in the first <em>two</em> rows of an indirect block are <em>Starting + Block Size</em> number of bytes in size, and the blocks in each subsequent + row are twice the size of the blocks in the previous row. In other + words, blocks in the third row are twice the <em>Starting Block + Size</em>, blocks in the fourth row are four times the <em>Starting + Block Size</em>, and so on. Entries for blocks up to the <em>Maximum + Direct Block Size</em> point to direct blocks, and entries for blocks + greater than that size point to further indirect blocks (which have + their own entries for direct and indirect blocks). +</p> + +<p> + The number of rows of blocks, <em>nrows</em>, in an indirect block of + size <em>iblock_size</em> is given by the following expression: <br /> + <br /> <em>nrows</em> = (log<sub>2</sub>(<em>iblock_size</em>) - log<sub>2</sub>(<em><Starting + Block Size></em> * <em><Width></em>)) + 1 +</p> + +<p> + The maximum number of rows of direct blocks, <em>max_dblock_rows</em>, + in any indirect block of a fractal heap is given by the following + expression: <br /> <br /> <em>max_dblock_rows</em> = (log<sub>2</sub>(<em><Max. + Direct Block Size></em>) - log<sub>2</sub>(<em><Starting Block + Size></em>)) + 2 +</p> + +<p> + Using the computed values for <em>nrows</em> and <em>max_dblock_rows</em>, + along with the <em>Width</em> of the doubling table, the number of + direct and indirect block entries (<em>K</em> and <em>N</em> in the + indirect block description, below) in an indirect block can be + computed: <br /> <br /> <em>K</em> = MIN(<em>nrows</em>, <em>max_dblock_rows</em>) + * <em>Width</em> <br /> <br /> If <em>nrows</em> is less than or + equal to <em>max_dblock_rows</em>, <em>N</em> is 0. Otherwise, <em>N</em> + is simply computed: <br /> <br /> <em>N</em> = <em>K</em> - (<em>max_dblock_rows</em> + * <em>Width</em>) +</p> + +<p>The size indirect blocks on disk is determined by the number of + rows in the indirect block (computed above). The size of direct blocks + on disk is exactly the size of the block in the doubling table.</p> + +<div align="center"> + <table class="format"> + <caption>Fractal Heap Header</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td colspan="4">Signature</td> + <td colspan="4">Signature</td> </tr> <tr> - <td>Version</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> + <td>Version</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> </tr> <tr> - <td colspan="2">Heap ID Length</td> - <td colspan="2">I/O Filters’ Encoded Length</td> + <td colspan="2">Heap ID Length</td> + <td colspan="2">I/O Filters’ Encoded Length</td> </tr> <tr> - <td>Flags</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> + <td>Flags</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> </tr> <tr> - <td colspan="4">Maximum Size of Managed Objects</td> + <td colspan="4">Maximum Size of Managed Objects</td> </tr> <tr> - <td colspan="4"><br />Next Huge Object ID<sup>L</sup><br /><br /></td> + <td colspan="4"><br />Next Huge Object ID<sup>L</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />v2 B-tree Address of Huge Objects<sup>O</sup><br /><br /></td> + <td colspan="4"><br />v2 B-tree Address of Huge Objects<sup>O</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Amount of Free Space in Managed Blocks<sup>L</sup><br /><br /></td> + <td colspan="4"><br />Amount of Free Space in Managed Blocks<sup>L</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Address of Managed Block Free Space Manager<sup>O</sup><br /><br /></td> + <td colspan="4"><br />Address of Managed Block Free Space + Manager<sup>O</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Amount of Managed Space in Heap<sup>L</sup><br /><br /></td> + <td colspan="4"><br />Amount of Managed Space in Heap<sup>L</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Amount of Allocated Managed Space in Heap<sup>L</sup><br /><br /></td> + <td colspan="4"><br />Amount of Allocated Managed Space in Heap<sup>L</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Offset of Direct Block Allocation Iterator in Managed Space<sup>L</sup><br /><br /></td> + <td colspan="4"><br />Offset of Direct Block Allocation + Iterator in Managed Space<sup>L</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Number of Managed Objects in Heap<sup>L</sup><br /><br /></td> + <td colspan="4"><br />Number of Managed Objects in Heap<sup>L</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Size of Huge Objects in Heap<sup>L</sup><br /><br /></td> + <td colspan="4"><br />Size of Huge Objects in Heap<sup>L</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Number of Huge Objects in Heap<sup>L</sup><br /><br /></td> + <td colspan="4"><br />Number of Huge Objects in Heap<sup>L</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Size of Tiny Objects in Heap<sup>L</sup><br /><br /></td> + <td colspan="4"><br />Size of Tiny Objects in Heap<sup>L</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Number of Tiny Objects in Heap<sup>L</sup><br /><br /></td> + <td colspan="4"><br />Number of Tiny Objects in Heap<sup>L</sup><br /> + <br /></td> </tr> <tr> - <td colspan="2">Table Width</td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> + <td colspan="2">Table Width</td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> </tr> <tr> - <td colspan="4"><br />Starting Block Size<sup>L</sup><br /><br /></td> + <td colspan="4"><br />Starting Block Size<sup>L</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Maximum Direct Block Size<sup>L</sup><br /><br /></td> + <td colspan="4"><br />Maximum Direct Block Size<sup>L</sup><br /> + <br /></td> </tr> <tr> - <td colspan="2">Maximum Heap Size</td> - <td colspan="2">Starting # of Rows in Root Indirect Block</td> + <td colspan="2">Maximum Heap Size</td> + <td colspan="2">Starting # of Rows in Root Indirect Block</td> </tr> <tr> - <td colspan="4"><br />Address of Root Block<sup>O</sup><br /><br /></td> + <td colspan="4"><br />Address of Root Block<sup>O</sup><br /> + <br /></td> </tr> <tr> - <td colspan="2">Current # of Rows in Root Indirect Block</td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> + <td colspan="2">Current # of Rows in Root Indirect Block</td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> </tr> <tr> - <td colspan="4"><br />Size of Filtered Root Direct Block <em>(optional)</em><sup>L</sup><br /><br /></td> + <td colspan="4"><br />Size of Filtered Root Direct Block <em>(optional)</em><sup>L</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4">I/O Filter Mask<em> (optional)</em></td> + <td colspan="4">I/O Filter Mask<em> (optional)</em></td> </tr> <tr> - <td colspan="4">I/O Filter Information<em> (optional, variable size)</em></td> + <td colspan="4">I/O Filter Information<em> (optional, + variable size)</em></td> </tr> <tr> - <td colspan="4">Checksum</td> + <td colspan="4">Checksum</td> </tr> - </table> + </table> - <table class="note"> + <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> <tr> - <td> </td> - <td> - (Items marked with an ‘L’ in the above table are of the size - specified in “Size of Lengths” field in the superblock.) - </td></tr> - </table> + <td> </td> + <td>(Items marked with an ‘L’ in the above table are + of the size specified in “Size of Lengths” field in the + superblock.)</td> + </tr> + </table> - </div> +</div> - <br /> - <div align="center"> - <table class="desc"> +<br /> +<div align="center"> + <table class="desc"> <tr> - <th width="40%">Field Name</th> - <th>Description</th> + <th width="40%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Signature</p></td> - <td> - <p>The ASCII character string “<code>FRHP</code>” - is used to indicate the - beginning of a fractal heap header. This gives file consistency - checking utilities a better chance of reconstructing a - damaged file. - </p> - </td> + <td><p>Signature</p></td> + <td> + <p> + The ASCII character string “ + <code>FRHP</code> + ” is used to indicate the beginning of a fractal heap header. + This gives file consistency checking utilities a better chance of + reconstructing a damaged file. + </p> + </td> </tr> <tr> - <td><p>Version</p></td> - <td> - <p>This document describes version 0.</p> - </td> + <td><p>Version</p></td> + <td> + <p>This document describes version 0.</p> + </td> </tr> <tr> - <td><p>Heap ID Length</p></td> - <td> - <p>This is the length in bytes of heap object IDs for this heap.</p> - </td> + <td><p>Heap ID Length</p></td> + <td> + <p>This is the length in bytes of heap object IDs for this heap.</p> + </td> </tr> <tr> - <td><p>I/O Filters’ Encoded Length</p></td> - <td> - <p>This is the size in bytes of the encoded <em>I/O Filter Information</em>. - </p> - </td> + <td><p>I/O Filters’ Encoded Length</p></td> + <td> + <p> + This is the size in bytes of the encoded <em>I/O Filter + Information</em>. + </p> + </td> </tr> <tr> - <td><p>Flags</p></td> - <td> - <p>This field is the heap status flag and is a bit field - indicating additional information about the fractal heap. - <table class="list"> - <tr> - <th width="20%" align="center">Bit(s)</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>If set, the ID value to use for huge object has wrapped - around. If the value for the <em>Next Huge Object ID</em> - has wrapped around, each new huge object inserted into the - heap will require a search for an ID value. - </td> - </tr> - <tr> - <td align="center"><code>1</code></td> - <td>If set, the direct blocks in the heap are checksummed. - </td> - </tr> - <tr> - <td align="center"><code>2-7</code></td> - <td>Reserved</td> - </tr> - </table></p> - - </td> - </tr> - - <tr> - <td><p>Maximum Size of Managed Objects</p></td> - <td> - <p>This is the maximum size of managed objects allowed in the heap. - Objects greater than this this are ‘huge’ objects and will be - stored in the file directly, rather than in a direct block for - the heap. - </p> - </td> + <td><p>Flags</p></td> + <td> + <p>This field is the heap status flag and is a bit field + indicating additional information about the fractal heap.</p> + <table class="list"> + <tr> + <th width="20%" align="center">Bit(s)</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>If set, the ID value to use for huge object has wrapped + around. If the value for the <em>Next Huge Object ID</em> has + wrapped around, each new huge object inserted into the heap will + require a search for an ID value. + </td> + </tr> + <tr> + <td align="center"><code>1</code></td> + <td>If set, the direct blocks in the heap are checksummed.</td> + </tr> + <tr> + <td align="center"><code>2-7</code></td> + <td>Reserved</td> + </tr> + </table> + <p></p> + + </td> </tr> <tr> - <td><p>Next Huge Object ID</p></td> - <td> - <p>This is the next ID value to use for a huge object in the heap. - </p> - </td> + <td><p>Maximum Size of Managed Objects</p></td> + <td> + <p>This is the maximum size of managed objects allowed in the + heap. Objects greater than this this are ‘huge’ objects + and will be stored in the file directly, rather than in a direct + block for the heap.</p> + </td> </tr> <tr> - <td><p>v2 B-tree Address of Huge Objects</p></td> - <td> - <p>This is the address of the <a href="#V2Btrees">v2 B-tree</a> - used to track huge objects in the heap. The type of records - stored in the <em>v2 B-tree</em> will - be determined by whether the address & length of a huge object - can fit into a heap ID (if yes, it is a “directly” accessed - huge object) and whether there is a filter used on objects - in the heap. - </p> - </td> + <td><p>Next Huge Object ID</p></td> + <td> + <p>This is the next ID value to use for a huge object in the + heap.</p> + </td> </tr> <tr> - <td><p>Amount of Free Space in Managed Blocks</p></td> - <td> - <p>This is the total amount of free space in managed direct blocks - (in bytes). - </p> - </td> + <td><p>v2 B-tree Address of Huge Objects</p></td> + <td> + <p> + This is the address of the <a href="#V2Btrees">v2 B-tree</a> used + to track huge objects in the heap. The type of records stored in + the <em>v2 B-tree</em> will be determined by whether the address & + length of a huge object can fit into a heap ID (if yes, it is a + “directly” accessed huge object) and whether there is a + filter used on objects in the heap. + </p> + </td> </tr> <tr> - <td><p>Address of Managed Block Free Space Manager</p></td> - <td> - <p>This is the address of the - <em><a href="#FreeSpaceManager">Free-space Manager</a></em> for - managed blocks. - </p> - </td> + <td><p>Amount of Free Space in Managed Blocks</p></td> + <td> + <p>This is the total amount of free space in managed direct + blocks (in bytes).</p> + </td> </tr> <tr> - <td><p>Amount of Managed Space in Heap</p></td> - <td> - <p>This is the total amount of managed space in the heap (in bytes), - essentially the upper bound of the heap’s linear address space. - </p> - </td> + <td><p>Address of Managed Block Free Space Manager</p></td> + <td> + <p> + This is the address of the <em><a href="#FreeSpaceManager">Free-space + Manager</a></em> for managed blocks. + </p> + </td> </tr> - <tr> - <td><p>Amount of Allocated Managed Space in Heap</p></td> - <td> - <p>This is the total amount of managed space (in bytes) actually - allocated in - the heap. This can be less than the <em>Amount of Managed Space - in Heap</em> field, if some direct blocks in the heap’s linear - address space are not allocated. - </p> - </td> - </tr> - - <tr> - <td><p>Offset of Direct Block Allocation Iterator in Managed Space</p></td> - <td> - <p>This is the linear heap offset where the next direct - block should be allocated at (in bytes). This may be less than - the <em>Amount of Managed Space in Heap</em> value because the - heap’s address space is increased by a “row” of direct blocks - at a time, rather than by single direct block increments. - </p> - </td> - </tr> - - <tr> - <td><p>Number of Managed Objects in Heap</p></td> - <td> - <p>This is the number of managed objects in the heap. - </p> - </td> - </tr> - - <tr> - <td><p>Size of Huge Objects in Heap</p></td> - <td> - <p>This is the total size of huge objects in the heap (in bytes). - </p> - </td> - </tr> - - <tr> - <td><p>Number of Huge Objects in Heap</p></td> - <td> - <p>This is the number of huge objects in the heap. - </p> - </td> - </tr> - - <tr> - <td><p>Size of Tiny Objects in Heap</p></td> - <td> - <p>This is the total size of tiny objects that are packed in heap - IDs (in bytes). - </p> - </td> - </tr> - - <tr> - <td><p>Number of Tiny Objects in Heap</p></td> - <td> - <p>This is the number of tiny objects that are packed in heap IDs. - </p> - </td> - </tr> - - <tr> - <td><p>Table Width</p></td> - <td> - <p>This is the number of columns in the doubling table for managed - blocks. This value must be a power of two. - </p> - </td> - </tr> - - <tr> - <td><p>Starting Block Size</p></td> - <td> - <p>This is the starting block size to use in the doubling table for - managed blocks (in bytes). This value must be a power of two. - </p> - </td> - </tr> - - <tr> - <td><p>Maximum Direct Block Size</p></td> - <td> - <p>This is the maximum size allowed for a managed direct block. - Objects inserted into the heap that are larger than this value - (less the # of bytes of direct block prefix/suffix) - are stored as ‘huge’ objects. This value must be a power of - two. - </p> - </td> - </tr> - - <tr> - <td><p>Maximum Heap Size</p></td> - <td> - <p>This is the maximum size of the heap’s linear address space for - managed objects (in bytes). The value stored is the log2 of - the actual value, that is: the # of bits of the address space. - ‘Huge’ and ‘tiny’ objects are not counted in this value, since - they do not store objects in the linear address space of the - heap. - </p> - </td> - </tr> - - <tr> - <td><p>Starting # of Rows in Root Indirect Block</p></td> - <td> - <p>This is the starting number of rows for the root indirect block. - A value of 0 indicates that the root indirect block will have - the maximum number of rows needed to address the heap’s <em>Maximum - Heap Size</em>. - </p> - </td> - </tr> - - <tr> - <td><p>Address of Root Block</p></td> - <td> - <p>This is the address of the root block for the heap. It can - be the <a href="#UndefinedAddress">undefined address</a> if - there is no data in the heap. It either points to a direct - block (if the <em>Current # of Rows in the Root Indirect Block</em> - value is 0), or an indirect block. - </p> - </td> - </tr> - - <tr> - <td><p>Current # of Rows in Root Indirect Block</p></td> - <td> - <p>This is the current number of rows in the root indirect block. - A value of 0 indicates that <em>Address of Root Block</em> - points to direct block instead of indirect block. - </p> - </td> - </tr> - - <tr> - <td><p>Size of Filtered Root Direct Block</p></td> - <td> - <p>This is the size of the root direct block, if filters are - applied to heap objects (in bytes). This field is only - stored in the header if the <em>I/O Filters’ Encoded Length</em> - is greater than 0. - </p> - </td> - </tr> - - <tr> - <td><p>I/O Filter Mask</p></td> - <td> - <p>This is the filter mask for the root direct block, if filters - are applied to heap objects. This mask has the same format as - that used for the filter mask in chunked raw data records in a - <a href="#V1Btrees">v1 B-tree</a>. - This field is only - stored in the header if the <em>I/O Filters’ Encoded Length</em> - is greater than 0. - </p> - </td> - </tr> - - <tr> - <td><p>I/O Filter Information</p></td> - <td> - <p>This is the I/O filter information encoding direct blocks and - huge objects, if filters are applied to heap objects. This - field is encoded as a <a href="#FilterMessage">Filter Pipeline</a> - message. - The size of this field is determined by <em>I/O Filters’ - Encoded Length</em>. - </p> - </td> - </tr> - - <tr> - <td><p>Checksum</p></td> - <td> - <p>This is the checksum for the header.</p> - </td> + <tr> + <td><p>Amount of Managed Space in Heap</p></td> + <td> + <p>This is the total amount of managed space in the heap (in + bytes), essentially the upper bound of the heap’s linear + address space.</p> + </td> </tr> - </table> - </div> + <tr> + <td><p>Amount of Allocated Managed Space in Heap</p></td> + <td> + <p> + This is the total amount of managed space (in bytes) actually + allocated in the heap. This can be less than the <em>Amount of + Managed Space in Heap</em> field, if some direct blocks in the + heap’s linear address space are not allocated. + </p> + </td> + </tr> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Fractal Heap Direct Block - </caption> + <tr> + <td><p>Offset of Direct Block Allocation Iterator in Managed + Space</p></td> + <td> + <p> + This is the linear heap offset where the next direct block should + be allocated at (in bytes). This may be less than the <em>Amount + of Managed Space in Heap</em> value because the heap’s address + space is increased by a “row” of direct blocks at a + time, rather than by single direct block increments. + </p> + </td> + </tr> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <td><p>Number of Managed Objects in Heap</p></td> + <td> + <p>This is the number of managed objects in the heap.</p> + </td> </tr> <tr> - <td colspan="4">Signature</td> + <td><p>Size of Huge Objects in Heap</p></td> + <td> + <p>This is the total size of huge objects in the heap (in + bytes).</p> + </td> </tr> <tr> - <td>Version</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> + <td><p>Number of Huge Objects in Heap</p></td> + <td> + <p>This is the number of huge objects in the heap.</p> + </td> </tr> <tr> - <td colspan="4"><br />Heap Header Address<sup>O</sup><br /><br /></td> + <td><p>Size of Tiny Objects in Heap</p></td> + <td> + <p>This is the total size of tiny objects that are packed in + heap IDs (in bytes).</p> + </td> </tr> <tr> - <td colspan="4">Block Offset <em>(variable size)</em></td> + <td><p>Number of Tiny Objects in Heap</p></td> + <td> + <p>This is the number of tiny objects that are packed in heap + IDs.</p> + </td> </tr> <tr> - <td colspan="4">Checksum <em>(optional)</em></td> + <td><p>Table Width</p></td> + <td> + <p>This is the number of columns in the doubling table for + managed blocks. This value must be a power of two.</p> + </td> </tr> <tr> - <td colspan="4"><br />Object Data <em>(variable size)</em><br /><br /></td> + <td><p>Starting Block Size</p></td> + <td> + <p>This is the starting block size to use in the doubling table + for managed blocks (in bytes). This value must be a power of two.</p> + </td> </tr> - </table> + <tr> + <td><p>Maximum Direct Block Size</p></td> + <td> + <p>This is the maximum size allowed for a managed direct block. + Objects inserted into the heap that are larger than this value + (less the # of bytes of direct block prefix/suffix) are stored as + ‘huge’ objects. This value must be a power of two.</p> + </td> + </tr> - <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> - </table> + <td><p>Maximum Heap Size</p></td> + <td> + <p>This is the maximum size of the heap’s linear address + space for managed objects (in bytes). The value stored is the log2 + of the actual value, that is: the # of bits of the address space. + ‘Huge’ and ‘tiny’ objects are not counted + in this value, since they do not store objects in the linear + address space of the heap.</p> + </td> + </tr> - </div> + <tr> + <td><p>Starting # of Rows in Root Indirect Block</p></td> + <td> + <p> + This is the starting number of rows for the root indirect block. A + value of 0 indicates that the root indirect block will have the + maximum number of rows needed to address the heap’s <em>Maximum + Heap Size</em>. + </p> + </td> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> + <tr> + <td><p>Address of Root Block</p></td> + <td> + <p> + This is the address of the root block for the heap. It can be the <a + href="#UndefinedAddress">undefined address</a> if there is no data + in the heap. It either points to a direct block (if the <em>Current + # of Rows in the Root Indirect Block</em> value is 0), or an indirect + block. + </p> + </td> </tr> <tr> - <td><p>Signature</p></td> - <td> - <p>The ASCII character string “<code>FHDB</code>” - is used to indicate the - beginning of a fractal heap direct block. This gives file consistency - checking utilities a better chance of reconstructing a - damaged file. - </p> - </td> + <td><p>Current # of Rows in Root Indirect Block</p></td> + <td> + <p> + This is the current number of rows in the root indirect block. A + value of 0 indicates that <em>Address of Root Block</em> points to + direct block instead of indirect block. + </p> + </td> + </tr> + + <tr> + <td><p>Size of Filtered Root Direct Block</p></td> + <td> + <p> + This is the size of the root direct block, if filters are applied + to heap objects (in bytes). This field is only stored in the header + if the <em>I/O Filters’ Encoded Length</em> is greater than + 0. + </p> + </td> </tr> <tr> - <td><p>Version</p></td> - <td> - <p>This document describes version 0.</p> - </td> + <td><p>I/O Filter Mask</p></td> + <td> + <p> + This is the filter mask for the root direct block, if filters are + applied to heap objects. This mask has the same format as that used + for the filter mask in chunked raw data records in a <a + href="#V1Btrees">v1 B-tree</a>. This field is only stored in the + header if the <em>I/O Filters’ Encoded Length</em> is greater + than 0. + </p> + </td> </tr> <tr> - <td><p>Heap Header Address</p></td> - <td> - <p>This is the address for the fractal heap header that this - block belongs to. This field is principally used for file - integrity checking. - </p> - </td> + <td><p>I/O Filter Information</p></td> + <td> + <p> + This is the I/O filter information encoding direct blocks and huge + objects, if filters are applied to heap objects. This field is + encoded as a <a href="#FilterMessage">Filter Pipeline</a> message. + The size of this field is determined by <em>I/O Filters’ + Encoded Length</em>. + </p> + </td> </tr> <tr> - <td><p>Block Offset</p></td> - <td> - <p>This is the offset of the block within the fractal heap’s - address space (in bytes). The number of bytes used to encode - this field is the <em>Maximum Heap Size</em> (in the heap’s - header) divided by 8 and rounded up to the next highest integer, - for values that are not a multiple of 8. This value is - principally used for file integrity checking. - </p> - </td> + <td><p>Checksum</p></td> + <td> + <p>This is the checksum for the header.</p> + </td> </tr> + </table> +</div> + +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Fractal Heap Direct Block</caption> + <tr> - <td><p>Checksum</p></td> - <td> - <p>This is the checksum for the direct block.</p> - <p>This field is only present if bit 1 of <em>Flags</em> in the - heap’s header is set.</p> - </td> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td><p>Object Data</p></td> - <td> - <p>This section of the direct block stores the actual data for - objects in the heap. The size of this section is determined by - the direct block’s size minus the size of the other fields - stored in the direct block (for example, the <em>Signature</em>, - <em>Version</em>, and others including the <em>Checksum</em> if it is - present). - </p> - </td> + <td colspan="4">Signature</td> </tr> - </table> - </div> + <tr> + <td>Version</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Fractal Heap Indirect Block - </caption> + <tr> + <td colspan="4"><br />Heap Header Address<sup>O</sup><br /> + <br /></td> + </tr> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <td colspan="4">Block Offset <em>(variable size)</em></td> </tr> <tr> - <td colspan="4">Signature</td> + <td colspan="4">Checksum <em>(optional)</em></td> </tr> <tr> - <td>Version</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> + <td colspan="4"><br />Object Data <em>(variable size)</em><br /> + <br /></td> </tr> + </table> + + <table class="note"> <tr> - <td colspan="4"><br />Heap Header Address<sup>O</sup><br /><br /></td> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> <tr> - <td colspan="4">Block Offset <em>(variable size)</em></td> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td colspan="4"><br />Child Direct Block #0 Address<sup>O</sup><br /><br /></td> - </tr> - <tr> - <td colspan="4"><br />Size of Filtered Direct Block #0 <em>(optional)</em> <sup>L</sup><br /><br /></td> - </tr> - <tr> - <td colspan="4">Filter Mask for Direct Block #0 <em>(optional)</em></td> - </tr> + <td><p>Signature</p></td> + <td> + <p> + The ASCII character string “ + <code>FHDB</code> + ” is used to indicate the beginning of a fractal heap direct + block. This gives file consistency checking utilities a better + chance of reconstructing a damaged file. + </p> + </td> + </tr> <tr> - <td colspan="4"><br />Child Direct Block #1 Address<sup>O</sup><br /><br /></td> - </tr> - <tr> - <td colspan="4"><br />Size of Filtered Direct Block #1 <em>(optional)</em><sup>L</sup><br /><br /></td> - </tr> - <tr> - <td colspan="4">Filter Mask for Direct Block #1 <em>(optional)</em></td> - </tr> + <td><p>Version</p></td> + <td> + <p>This document describes version 0.</p> + </td> + </tr> - <tr> - <td colspan="4">...</td> - </tr> + <tr> + <td><p>Heap Header Address</p></td> + <td> + <p>This is the address for the fractal heap header that this + block belongs to. This field is principally used for file integrity + checking.</p> + </td> + </tr> <tr> - <td colspan="4"><br />Child Direct Block #K-1 Address<sup>O</sup><br /><br /></td> - </tr> - <tr> - <td colspan="4"><br />Size of Filtered Direct Block #K-1 <em>(optional)</em><sup>L</sup><br /><br /></td> - </tr> - <tr> - <td colspan="4">Filter Mask for Direct Block #K-1 <em>(optional)</em></td> - </tr> + <td><p>Block Offset</p></td> + <td> + <p> + This is the offset of the block within the fractal heap’s + address space (in bytes). The number of bytes used to encode this + field is the <em>Maximum Heap Size</em> (in the heap’s + header) divided by 8 and rounded up to the next highest integer, + for values that are not a multiple of 8. This value is principally + used for file integrity checking. + </p> + </td> + </tr> <tr> - <td colspan="4"><br />Child Indirect Block #0 Address<sup>O</sup><br /><br /></td> - </tr> + <td><p>Checksum</p></td> + <td> + <p>This is the checksum for the direct block.</p> + <p> + This field is only present if bit 1 of <em>Flags</em> in the + heap’s header is set. + </p> + </td> + </tr> <tr> - <td colspan="4"><br />Child Indirect Block #1 Address<sup>O</sup><br /><br /></td> - </tr> + <td><p>Object Data</p></td> + <td> + <p> + This section of the direct block stores the actual data for objects + in the heap. The size of this section is determined by the direct + block’s size minus the size of the other fields stored in the + direct block (for example, the <em>Signature</em>, <em>Version</em>, + and others including the <em>Checksum</em> if it is present). + </p> + </td> + </tr> - <tr> - <td colspan="4">...</td> - </tr> + </table> +</div> + +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Fractal Heap Indirect Block</caption> <tr> - <td colspan="4"><br />Child Indirect Block #N-1 Address<sup>O</sup><br /><br /></td> - </tr> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + </tr> <tr> - <td colspan="4">Checksum</td> + <td colspan="4">Signature</td> </tr> - </table> - <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> + <td>Version</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + <tr> - <td> </td> - <td> - (Items marked with an ‘L’ in the above table are of the size - specified in “Size of Lengths” field in the superblock.) - </td></tr> - </table> + <td colspan="4"><br />Heap Header Address<sup>O</sup><br /> + <br /></td> + </tr> - </div> + <tr> + <td colspan="4">Block Offset <em>(variable size)</em></td> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> + <tr> + <td colspan="4"><br />Child Direct Block #0 Address<sup>O</sup><br /> + <br /></td> + </tr> + <tr> + <td colspan="4"><br />Size of Filtered Direct Block #0 <em>(optional)</em> + <sup>L</sup><br /> + <br /></td> + </tr> + <tr> + <td colspan="4">Filter Mask for Direct Block #0 <em>(optional)</em></td> </tr> <tr> - <td><p>Signature</p></td> - <td> - <p>The ASCII character string “<code>FHIB</code>” is used to - indicate the beginning of a fractal heap indirect block. This - gives file consistency checking utilities a better chance of - reconstructing a damaged file. - </p> - </td> + <td colspan="4"><br />Child Direct Block #1 Address<sup>O</sup><br /> + <br /></td> + </tr> + <tr> + <td colspan="4"><br />Size of Filtered Direct Block #1 <em>(optional)</em><sup>L</sup><br /> + <br /></td> + </tr> + <tr> + <td colspan="4">Filter Mask for Direct Block #1 <em>(optional)</em></td> </tr> <tr> - <td><p>Version</p></td> - <td> - <p>This document describes version 0.</p> - </td> + <td colspan="4">...</td> </tr> <tr> - <td><p>Heap Header Address</p></td> - <td> - <p>This is the address for the fractal heap header that this - block belongs to. This field is principally used for file - integrity checking. - </p> - </td> + <td colspan="4"><br />Child Direct Block #K-1 Address<sup>O</sup><br /> + <br /></td> + </tr> + <tr> + <td colspan="4"><br />Size of Filtered Direct Block #K-1 <em>(optional)</em><sup>L</sup><br /> + <br /></td> + </tr> + <tr> + <td colspan="4">Filter Mask for Direct Block #K-1 <em>(optional)</em></td> </tr> <tr> - <td><p>Block Offset</p></td> - <td> - <p>This is the offset of the block within the fractal heap’s - address space (in bytes). The number of bytes used to encode - this field is the <em>Maximum Heap Size</em> (in the heap’s - header) divided by 8 and rounded up to the next highest integer, - for values that are not a multiple of 8. This value is - principally used for file integrity checking. - </p> - </td> + <td colspan="4"><br />Child Indirect Block #0 Address<sup>O</sup><br /> + <br /></td> </tr> <tr> - <td><p>Child Direct Block #K Address</p></td> - <td> - <p>This field is the address of the child direct block. - The size of the [uncompressed] direct block can be computed by - its offset in the heap’s linear address space. - </p> - </td> + <td colspan="4"><br />Child Indirect Block #1 Address<sup>O</sup><br /> + <br /></td> </tr> - <tr> - <td><p>Size of Filtered Direct Block #K</p></td> - <td> - <p>This is the size of the child direct block after passing through - the I/O filters defined for this heap (in bytes). If no I/O - filters are present for this heap, this field is not present. - </p> - </td> - </tr> - <tr> - <td><p>Filter Mask for Direct Block #K</p></td> - <td> - <p>This is the I/O filter mask for the filtered direct block. - This mask has the same format as that used for the filter mask - in chunked raw data records in a <a href="#V1Btrees">v1 B-tree</a>. - If no I/O filters are present for this heap, this field is not - present. - </p> - </td> + <tr> + <td colspan="4">...</td> </tr> <tr> - <td><p>Child Indirect Block #N Address</p></td> - <td> - <p>This field is the address of the child indirect block. - The size of the indirect block can be computed by - its offset in the heap’s linear address space. - </p> - </td> + <td colspan="4"><br />Child Indirect Block #N-1 Address<sup>O</sup><br /> + <br /></td> </tr> <tr> - <td><p>Checksum</p></td> - <td> - <p>This is the checksum for the indirect block.</p> - </td> + <td colspan="4">Checksum</td> </tr> + </table> - </table> + <table class="note"> + <tr> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> + <tr> + <td> </td> + <td>(Items marked with an ‘L’ in the above table are + of the size specified in “Size of Lengths” field in the + superblock.)</td> + </tr> + </table> - </div> +</div> - <br /> - <p>An object in the fractal heap is identified by means of a fractal heap ID, - which encodes information to locate the object in the heap. - Currently, the fractal heap stores an object in one of three ways, - depending on the object’s size:</p> - - <div align="center"> - <table class="list80"> - <tr> - <th width="20%">Type</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center">Tiny</td> - <td> - <p>When an object is small enough to be encoded in the heap ID, the - object’s data is embedded in the fractal heap ID itself. There are - 2 sub-types for this type of object: normal and extended. The - sub-type for tiny heap IDs depends on whether the heap ID is large - enough to store objects greater than 16 bytes or not. If the - heap ID length is 18 bytes or smaller, the ‘normal’ tiny heap ID - form is used. If the heap ID length is greater than 18 bytes in - length, the “extended” form is used. See format description below - for both sub-types. - </p> - </td> - </tr> - - <tr> - <td align="center">Huge</td> - <td> - <p>When the size of an object is larger than <em>Maximum Size of - Managed Objects</em> in the <em>Fractal Heap Header</em>, the - object’s data is stored on its own in the file and the object - is tracked/indexed via a version 2 B-tree. All huge objects - for a particular fractal heap use the same v2 B-tree. All huge - objects for a particular fractal heap use the same format for - their huge object IDs. - </p> - - <p>Depending on whether the IDs for a heap are large enough to hold - the object’s retrieval information and whether I/O pipeline filters - are applied to the heap’s objects, 4 sub-types are derived for - huge object IDs for this heap:</p> - - <div align="center"> - <table class="list"> - <tr> - <th align="left" width="35%">Sub-type</th> - <th align="left">Description</th> - </tr> - - <tr> - <td align="left">Directly accessed, non-filtered</td> - <td> - <p>The object’s address and length are embedded in the - fractal heap ID itself and the object is directly accessed - from them. This allows the object to be accessed without - resorting to the B-tree. - </p> - </td> - </tr> - - <tr> - <td align="left">Directly accessed, filtered</td> - <td> - <p>The filtered object’s address, length, filter mask and - de-filtered size are embedded in the fractal heap ID itself - and the object is accessed directly with them. This allows - the object to be accessed without resorting to the B-tree. - </p> - </td> - </tr> - - <tr> - <td align="left">Indirectly accessed, non-filtered</td> - <td> - <p>The object is located by using a B-tree key embedded in - the fractal heap ID to retrieve the address and length from - the version 2 B-tree for huge objects. Then, the address - and length are used to access the object. - </p> - </td> - </tr> - - <tr> - <td align="left">Indirectly accessed, filtered</td> - <td> - <p>The object is located by using a B-tree key embedded in - the fractal heap ID to retrieve the filtered object’s - address, length, filter mask and de-filtered size from the - version 2 B-tree for huge objects. Then, this information - is used to access the object. - </p> - </td> - </tr> - </table> - </div> - - </td> - </tr> - - <tr> - <td align="center">Managed</td> - <td> - <p>When the size of an object does not meet the above two - conditions, the object is stored and managed via the direct and - indirect blocks based on the doubling table. - </p> - </td> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> </tr> - </table> - </div> + <tr> + <td><p>Signature</p></td> + <td> + <p> + The ASCII character string “ + <code>FHIB</code> + ” is used to indicate the beginning of a fractal heap + indirect block. This gives file consistency checking utilities a + better chance of reconstructing a damaged file. + </p> + </td> + </tr> - <p>The specific format for each type of heap ID is described below: - </p> + <tr> + <td><p>Version</p></td> + <td> + <p>This document describes version 0.</p> + </td> + </tr> - <div align="center"> - <table class="format"> - <caption>Fractal Heap ID for Tiny Objects (sub-type 1 - ‘Normal’) - </caption> + <tr> + <td><p>Heap Header Address</p></td> + <td> + <p>This is the address for the fractal heap header that this + block belongs to. This field is principally used for file integrity + checking.</p> + </td> + </tr> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> - </tr> + <td><p>Block Offset</p></td> + <td> + <p> + This is the offset of the block within the fractal heap’s + address space (in bytes). The number of bytes used to encode this + field is the <em>Maximum Heap Size</em> (in the heap’s + header) divided by 8 and rounded up to the next highest integer, + for values that are not a multiple of 8. This value is principally + used for file integrity checking. + </p> + </td> + </tr> <tr> - <td>Version, Type & Length</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> + <td><p>Child Direct Block #K Address</p></td> + <td> + <p>This field is the address of the child direct block. The size + of the [uncompressed] direct block can be computed by its offset in + the heap’s linear address space.</p> + </td> </tr> <tr> - <td colspan="4"><br />Data <em>(variable size)</em></td> + <td><p>Size of Filtered Direct Block #K</p></td> + <td> + <p>This is the size of the child direct block after passing + through the I/O filters defined for this heap (in bytes). If no I/O + filters are present for this heap, this field is not present.</p> + </td> + </tr> + <tr> + <td><p>Filter Mask for Direct Block #K</p></td> + <td> + <p> + This is the I/O filter mask for the filtered direct block. This + mask has the same format as that used for the filter mask in + chunked raw data records in a <a href="#V1Btrees">v1 B-tree</a>. If + no I/O filters are present for this heap, this field is not + present. + </p> + </td> </tr> - </table> - </div> + <tr> + <td><p>Child Indirect Block #N Address</p></td> + <td> + <p>This field is the address of the child indirect block. The + size of the indirect block can be computed by its offset in the + heap’s linear address space.</p> + </td> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version, Type & Length</p></td> - <td> - <p>This is a bit field with the following definition: - <table class="list"> - <tr> - <th width="20%" align="center">Bit</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>6-7</code></td> - <td>The current version of ID format. This document - describes version 0. - </td> - </tr> - <tr> - <td align="center"><code>4-5</code></td> - <td>The ID type. Tiny objects have a value of <code>2</code>. - </td> - </tr> - <tr> - <td align="center"><code>0-3</code></td> - <td>The length of the tiny object. The value stored - is one less than the actual length (since zero-length - objects are not allowed to be stored in the heap). - For example, an object of actual length 1 has an - encoded length of 0, an object of actual length 2 - has an encoded length of 1, and so on. - </td> - </tr> - </table></p> - - </td> - </tr> - - <tr> - <td><p>Data</p></td> - <td> - <p>This is the data for the object. - </p> - </td> + <tr> + <td><p>Checksum</p></td> + <td> + <p>This is the checksum for the indirect block.</p> + </td> </tr> - </table> - </div> + </table> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption>Fractal Heap ID for Tiny Objects (sub-type 2 - ‘Extended’) - </caption> +</div> + +<br /> +<p>An object in the fractal heap is identified by means of a fractal + heap ID, which encodes information to locate the object in the heap. + Currently, the fractal heap stores an object in one of three ways, + depending on the object’s size:</p> + +<div align="center"> + <table class="list80"> + <tr> + <th width="20%">Type</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center">Tiny</td> + <td> + <p>When an object is small enough to be encoded in the heap ID, + the object’s data is embedded in the fractal heap ID itself. + There are 2 sub-types for this type of object: normal and extended. + The sub-type for tiny heap IDs depends on whether the heap ID is + large enough to store objects greater than 16 bytes or not. If the + heap ID length is 18 bytes or smaller, the ‘normal’ + tiny heap ID form is used. If the heap ID length is greater than 18 + bytes in length, the “extended” form is used. See + format description below for both sub-types.</p> + </td> + </tr> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> - </tr> + <td align="center">Huge</td> + <td> + <p> + When the size of an object is larger than <em>Maximum Size of + Managed Objects</em> in the <em>Fractal Heap Header</em>, the + object’s data is stored on its own in the file and the object + is tracked/indexed via a version 2 B-tree. All huge objects for a + particular fractal heap use the same v2 B-tree. All huge objects + for a particular fractal heap use the same format for their huge + object IDs. + </p> + + <p>Depending on whether the IDs for a heap are large enough to + hold the object’s retrieval information and whether I/O + pipeline filters are applied to the heap’s objects, 4 + sub-types are derived for huge object IDs for this heap:</p> + + <div align="center"> + <table class="list"> + <tr> + <th align="left" width="35%">Sub-type</th> + <th align="left">Description</th> + </tr> + + <tr> + <td align="left">Directly accessed, non-filtered</td> + <td> + <p>The object’s address and length are embedded in the + fractal heap ID itself and the object is directly accessed from + them. This allows the object to be accessed without resorting + to the B-tree.</p> + </td> + </tr> + + <tr> + <td align="left">Directly accessed, filtered</td> + <td> + <p>The filtered object’s address, length, filter mask + and de-filtered size are embedded in the fractal heap ID itself + and the object is accessed directly with them. This allows the + object to be accessed without resorting to the B-tree.</p> + </td> + </tr> + + <tr> + <td align="left">Indirectly accessed, non-filtered</td> + <td> + <p>The object is located by using a B-tree key embedded in + the fractal heap ID to retrieve the address and length from the + version 2 B-tree for huge objects. Then, the address and length + are used to access the object.</p> + </td> + </tr> + + <tr> + <td align="left">Indirectly accessed, filtered</td> + <td> + <p>The object is located by using a B-tree key embedded in + the fractal heap ID to retrieve the filtered object’s + address, length, filter mask and de-filtered size from the + version 2 B-tree for huge objects. Then, this information is + used to access the object.</p> + </td> + </tr> + </table> + </div> + + </td> + </tr> <tr> - <td>Version, Type & Length</td> - <td>Extended Length</td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> + <td align="center">Managed</td> + <td> + <p>When the size of an object does not meet the above two + conditions, the object is stored and managed via the direct and + indirect blocks based on the doubling table.</p> + </td> </tr> + </table> +</div> + + +<p>The specific format for each type of heap ID is described below: +</p> + +<div align="center"> + <table class="format"> + <caption>Fractal Heap ID for Tiny Objects (sub-type 1 - + ‘Normal’)</caption> <tr> - <td colspan="4">Data <em>(variable size)</em></td> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> - </table> - </div> + <tr> + <td>Version, Type & Length</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version, Type & Length</p></td> - <td> - <p>This is a bit field with the following definition: - <table class="list"> - <tr> - <th width="20%" align="center">Bit</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>6-7</code></td> - <td>The current version of ID format. This document - describes version 0. - </td> - </tr> - <tr> - <td align="center"><code>4-5</code></td> - <td>The ID type. Tiny objects have a value of <code>2</code>. - </td> - </tr> - <tr> - <td align="center"><code>0-3</code></td> - <td>These 4 bits, together with the next byte, form an - unsigned 12-bit integer for holding the length of the - object. These 4-bits are bits 8-11 of the 12-bit integer. - See description for the <em>Extended Length</em> field below. - </td> - </tr> - </table></p> - - </td> - </tr> - - <tr> - <td><p>Extended Length</p></td> - <td> - <p>This byte, together with the 4 bits in the previous byte, - forms an unsigned 12-bit integer for holding the length of - the tiny object. These 8 bits are bits 0-7 of the 12-bit - integer formed. The value stored is one less than the actual - length (since zero-length objects are not allowed to be - stored in the heap). For example, an object of actual length - 1 has an encoded length of 0, an object of actual length - 2 has an encoded length of 1, and so on. - </p> - </td> - </tr> - - <tr> - <td><p>Data</p></td> - <td> - <p>This is the data for the object. - </p> - </td> + <tr> + <td colspan="4"><br />Data <em>(variable size)</em></td> </tr> - </table> - </div> + </table> +</div> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption>Fractal Heap ID for Huge Objects (sub-type 1 & 2): indirectly accessed, non-filtered/filtered - </caption> + <tr> + <td><p>Version, Type & Length</p></td> + <td> + <p>This is a bit field with the following definition:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Bit</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>6-7</code></td> + <td>The current version of ID format. This document describes + version 0.</td> + </tr> + <tr> + <td align="center"><code>4-5</code></td> + <td>The ID type. Tiny objects have a value of <code>2</code>. + </td> + </tr> + <tr> + <td align="center"><code>0-3</code></td> + <td>The length of the tiny object. The value stored is one + less than the actual length (since zero-length objects are not + allowed to be stored in the heap). For example, an object of + actual length 1 has an encoded length of 0, an object of actual + length 2 has an encoded length of 1, and so on.</td> + </tr> + </table> + <p></p> + + </td> + </tr> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <td><p>Data</p></td> + <td> + <p>This is the data for the object.</p> + </td> </tr> + </table> +</div> + +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Fractal Heap ID for Tiny Objects (sub-type 2 - + ‘Extended’)</caption> + <tr> - <td>Version & Type</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td colspan="4"><br />v2 B-tree Key<sup>L</sup><em> (variable size)</em><br /><br /></td> + <td>Version, Type & Length</td> + <td>Extended Length</td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> </tr> - </table> + <tr> + <td colspan="4">Data <em>(variable size)</em></td> + </tr> + + </table> +</div> - <table class="note"> +<br /> +<div align="center"> + <table class="desc"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘L’ in the above table are of the size - specified in “Size of Lengths” field in the superblock.) - </td></tr> - </table> - </div> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> - <br /> - <div align="center"> - <table class="desc"> <tr> - <th width="30%">Field Name</th> - <th>Description</th> + <td><p>Version, Type & Length</p></td> + <td> + <p>This is a bit field with the following definition:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Bit</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>6-7</code></td> + <td>The current version of ID format. This document describes + version 0.</td> + </tr> + <tr> + <td align="center"><code>4-5</code></td> + <td>The ID type. Tiny objects have a value of <code>2</code>. + </td> + </tr> + <tr> + <td align="center"><code>0-3</code></td> + <td>These 4 bits, together with the next byte, form an + unsigned 12-bit integer for holding the length of the object. + These 4-bits are bits 8-11 of the 12-bit integer. See description + for the <em>Extended Length</em> field below. + </td> + </tr> + </table> + <p></p> + + </td> + </tr> + + <tr> + <td><p>Extended Length</p></td> + <td> + <p>This byte, together with the 4 bits in the previous byte, + forms an unsigned 12-bit integer for holding the length of the tiny + object. These 8 bits are bits 0-7 of the 12-bit integer formed. The + value stored is one less than the actual length (since zero-length + objects are not allowed to be stored in the heap). For example, an + object of actual length 1 has an encoded length of 0, an object of + actual length 2 has an encoded length of 1, and so on.</p> + </td> </tr> <tr> - <td><p>Version & Type</p></td> - <td> - <p>This is a bit field with the following definition: - <table class="list"> - <tr> - <th width="20%" align="center">Bit</th> - <th width="80%" align="left">Description</th> - </tr> + <td><p>Data</p></td> + <td> + <p>This is the data for the object.</p> + </td> + </tr> + + </table> +</div> - <tr> - <td align="center"><code>6-7</code></td> - <td>The current version of ID format. This document - describes version 0. - </td> - </tr> - <tr> - <td align="center"><code>4-5</code></td> - <td>The ID type. Huge objects have a value of <code>1</code>. - </td> - </tr> - <tr> - <td align="center"><code>0-3</code></td> - <td>Reserved. - </td> - </tr> - </table></p> - </td> +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Fractal Heap ID for Huge Objects (sub-type 1 & 2): + indirectly accessed, non-filtered/filtered</caption> + + <tr> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td><p>v2 B-tree Key</p></td> - <td><p>This field is the B-tree key for retrieving the information - from the version 2 B-tree for huge objects needed to access the - object. See the description of <a href="#V2Btrees">v2 B-tree</a> - records sub-type 1 & 2 for a description of the fields. New key - values are derived from <em>Next Huge Object ID</em> in the - <em>Fractal Heap Header</em>.</p> + <td>Version & Type</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + + <tr> + <td colspan="4"><br />v2 B-tree Key<sup>L</sup><em> + (variable size)</em><br /> + <br /></td> + </tr> + + </table> + + <table class="note"> + <tr> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘L’ in the + above table are of the size specified in “Size of + Lengths” field in the superblock.)</td> + </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Version & Type</p></td> + <td> + <p>This is a bit field with the following definition:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Bit</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>6-7</code></td> + <td>The current version of ID format. This document describes + version 0.</td> + </tr> + <tr> + <td align="center"><code>4-5</code></td> + <td>The ID type. Huge objects have a value of <code>1</code>. + </td> + </tr> + <tr> + <td align="center"><code>0-3</code></td> + <td>Reserved.</td> + </tr> + </table> + <p></p> + </td> </tr> - </table> - </div> + <tr> + <td><p>v2 B-tree Key</p></td> + <td><p> + This field is the B-tree key for retrieving the information from + the version 2 B-tree for huge objects needed to access the object. + See the description of <a href="#V2Btrees">v2 B-tree</a> records + sub-type 1 & 2 for a description of the fields. New key values are + derived from <em>Next Huge Object ID</em> in the <em>Fractal + Heap Header</em>. + </p></td> + </tr> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption>Fractal Heap ID for Huge Objects (sub-type 3): directly accessed, non-filtered - </caption> + </table> +</div> + +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Fractal Heap ID for Huge Objects (sub-type 3): + directly accessed, non-filtered</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td>Version & Type</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> + <td>Version & Type</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> </tr> <tr> - <td colspan="4"><br />Address <sup>O</sup><br /><br /></td> + <td colspan="4"><br />Address <sup>O</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Length <sup>L</sup><br /><br /></td> + <td colspan="4"><br />Length <sup>L</sup><br /> + <br /></td> </tr> - </table> + </table> - <table class="note"> + <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> <tr> - <td> </td> - <td> - (Items marked with an ‘L’ in the above table are of the size - specified in “Size of Lengths” field in the superblock.) - </td></tr> - </table> + <td> </td> + <td>(Items marked with an ‘L’ in the above table are + of the size specified in “Size of Lengths” field in the + superblock.)</td> + </tr> + </table> - </div> +</div> - <br /> - <div align="center"> - <table class="desc"> +<br /> +<div align="center"> + <table class="desc"> <tr> - <th width="30%">Field Name</th> - <th>Description</th> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Version & Type</p></td> - <td> - <p>This is a bit field with the following definition: - <table class="list"> - <tr> - <th width="20%" align="center">Bit</th> - <th width="80%" align="left">Description</th> - </tr> + <td><p>Version & Type</p></td> + <td> + <p>This is a bit field with the following definition:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Bit</th> + <th width="80%" align="left">Description</th> + </tr> - <tr> - <td align="center"><code>6-7</code></td> - <td>The current version of ID format. This document - describes version 0. - </td> - </tr> - <tr> - <td align="center"><code>4-5</code></td> - <td>The ID type. Huge objects have a value of <code>1</code>. - </td> - </tr> - <tr> - <td align="center"><code>0-3</code></td> - <td>Reserved. - </td> - </tr> - </table></p> + <tr> + <td align="center"><code>6-7</code></td> + <td>The current version of ID format. This document describes + version 0.</td> + </tr> + <tr> + <td align="center"><code>4-5</code></td> + <td>The ID type. Huge objects have a value of <code>1</code>. + </td> + </tr> + <tr> + <td align="center"><code>0-3</code></td> + <td>Reserved.</td> + </tr> + </table> + <p></p> - </td> + </td> </tr> <tr> @@ -5362,2899 +5492,2913 @@ III.F. Disk Format: Level 1F - Fractal Heap</a></h3> <tr> <td><p>Length</p></td> - <td><p>This field is the length of the object in the file.</p> - </td> + <td><p>This field is the length of the object in the file.</p></td> </tr> - </table> - </div> + </table> +</div> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption>Fractal Heap ID for Huge Objects (sub-type 4): directly accessed, filtered - </caption> +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Fractal Heap ID for Huge Objects (sub-type 4): + directly accessed, filtered</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td>Version & Type</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> + <td>Version & Type</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> </tr> <tr> - <td colspan="4"><br />Address <sup>O</sup><br /><br /></td> + <td colspan="4"><br />Address <sup>O</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Length <sup>L</sup><br /><br /></td> + <td colspan="4"><br />Length <sup>L</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4">Filter Mask</td> + <td colspan="4">Filter Mask</td> </tr> <tr> - <td colspan="4"><br />De-filtered Size <sup>L</sup><br /><br /></td> + <td colspan="4"><br />De-filtered Size <sup>L</sup><br /> + <br /></td> </tr> - </table> + </table> - <table class="note"> + <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> </tr> <tr> - <td> </td> - <td>(Items marked with an ‘L’ in the above table are of the size - specified in “Size of Lengths” field in the superblock.) - </td></tr> - </table> + <td> </td> + <td>(Items marked with an ‘L’ in the above table are + of the size specified in “Size of Lengths” field in the + superblock.)</td> + </tr> + </table> - </div> +</div> - <br /> - <div align="center"> - <table class="desc"> +<br /> +<div align="center"> + <table class="desc"> <tr> - <th width="30%">Field Name</th> - <th>Description</th> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Version & Type</p></td> - <td> - <p>This is a bit field with the following definition: - <table class="list"> - <tr> - <th width="20%" align="center">Bit</th> - <th width="80%" align="left">Description</th> - </tr> + <td><p>Version & Type</p></td> + <td> + <p>This is a bit field with the following definition:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Bit</th> + <th width="80%" align="left">Description</th> + </tr> - <tr> - <td align="center"><code>6-7</code></td> - <td>The current version of ID format. This document - describes version 0. - </td> - </tr> - <tr> - <td align="center"><code>4-5</code></td> - <td>The ID type. Huge objects have a value of <code>1</code>. - </td> - </tr> - <tr> - <td align="center"><code>0-3</code></td> - <td>Reserved. - </td> - </tr> - </table></p> + <tr> + <td align="center"><code>6-7</code></td> + <td>The current version of ID format. This document describes + version 0.</td> + </tr> + <tr> + <td align="center"><code>4-5</code></td> + <td>The ID type. Huge objects have a value of <code>1</code>. + </td> + </tr> + <tr> + <td align="center"><code>0-3</code></td> + <td>Reserved.</td> + </tr> + </table> + <p></p> - </td> + </td> </tr> <tr> <td><p>Address</p></td> - <td><p>This field is the address of the filtered object in the file.</p> - </td> - </tr> - - <tr> - <td><p>Length</p></td> - <td><p>This field is the length of the filtered object in the file.</p> - </td> - </tr> - - <tr> - <td><p>Filter Mask</p></td> - <td><p>This field is the I/O pipeline filter mask for the - filtered object in the file.</p> - </td> - </tr> - - <tr> - <td><p>Filtered Size</p></td> - <td><p>This field is the size of the de-filtered object in the file.</p> - </td> - </tr> + <td><p>This field is the address of the filtered object in + the file.</p></td> + </tr> - </table> - </div> + <tr> + <td><p>Length</p></td> + <td><p>This field is the length of the filtered object in + the file.</p></td> + </tr> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption>Fractal Heap ID for Managed Objects - </caption> + <tr> + <td><p>Filter Mask</p></td> + <td><p>This field is the I/O pipeline filter mask for the + filtered object in the file.</p></td> + </tr> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> - </tr> + <td><p>Filtered Size</p></td> + <td><p>This field is the size of the de-filtered object in + the file.</p></td> + </tr> + + </table> +</div> + +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Fractal Heap ID for Managed Objects</caption> <tr> - <td>Version & Type</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> + <tr> - <td colspan="4">Offset <em>(variable size)</em></td> + <td>Version & Type</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + <tr> + <td colspan="4">Offset <em>(variable size)</em></td> </tr> <tr> - <td colspan="4">Length <em>(variable size)</em></td> + <td colspan="4">Length <em>(variable size)</em></td> </tr> - </table> - </div> + </table> +</div> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version & Type</p></td> - <td><p>This is a bit field with the following definition: - <table class="list"> - <tr> - <th width="20%" align="center">Bit</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>6-7</code></td> - <td>The current version of ID format. This document - describes version 0. - </td> - </tr> - <tr> - <td align="center"><code>4-5</code></td> - <td>The ID type. Managed objects have a value of <code>0</code>. - </td> - </tr> - <tr> - <td align="center"><code>0-3</code></td> - <td>Reserved. - </td> - </tr> - </table></p> - </td> - </tr> - - <tr> - <td><p>Offset</p></td> - <td><p>This field is the offset of the object in the heap. - This field’s size is the minimum number of bytes - necessary to encode the <em>Maximum Heap Size</em> value - (from the <em>Fractal Heap Header</em>). For example, if the - value of the <em>Maximum Heap Size</em> is less than 256 bytes, - this field is 1 byte in length, a <em>Maximum Heap Size</em> - of 256-65535 bytes uses a 2 byte length, and so on.</p></td> - </tr> - - <tr> - <td><p>Length</p></td> - <td><p>This field is the length of the object in the heap. It - is determined by taking the minimum value of <em>Maximum - Direct Block Size</em> and <em>Maximum Size of Managed - Objects</em> in the <em>Fractal Heap Header</em>. Again, - the minimum number of bytes needed to encode that value is - used for the size of this field.</p></td> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> </tr> - </table> - </div> - -<br /> -<h3><a name="FreeSpaceManager"> -III.G. Disk Format: Level 1G - Free-space Manager</a></h3> - - <p> - Free-space managers are used to describe space within a heap or - the entire HDF5 file that is not currently used for that heap or - file. - </p> - - <p> - The <em>free-space manager header</em> contains metadata information - about the space being tracked, along with the address of the list - of <em>free space sections</em> which actually describes the free - space. The header records information about free-space sections being - tracked, creation parameters for handling free-space sections of a - client, and section information used to locate the collection of - free-space sections. - </p> - - <p> - The <em>free-space section list</em> stores a collection of - free-space sections that is specific to each <em>client</em> of the - free-space manager. - - For example, the fractal heap is a client of the free space manager - and uses it to track unused space within the heap. There are 4 - types of section records for the fractal heap, each of which has - its own format, listed below. - </p> - - <div align="center"> - <table class="format"> - <caption> - Free-space Manager Header - </caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <td><p>Version & Type</p></td> + <td><p>This is a bit field with the following definition:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Bit</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>6-7</code></td> + <td>The current version of ID format. This document describes + version 0.</td> + </tr> + <tr> + <td align="center"><code>4-5</code></td> + <td>The ID type. Managed objects have a value of <code>0</code>. + </td> + </tr> + <tr> + <td align="center"><code>0-3</code></td> + <td>Reserved.</td> + </tr> + </table> + <p></p></td> </tr> <tr> - <td colspan="4">Signature</td> + <td><p>Offset</p></td> + <td><p> + This field is the offset of the object in the heap. This + field’s size is the minimum number of bytes necessary to + encode the <em>Maximum Heap Size</em> value (from the <em>Fractal + Heap Header</em>). For example, if the value of the <em>Maximum + Heap Size</em> is less than 256 bytes, this field is 1 byte in length, + a <em>Maximum Heap Size</em> of 256-65535 bytes uses a 2 byte + length, and so on. + </p></td> </tr> <tr> - <td>Version</td> - <td>Client ID</td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> + <td><p>Length</p></td> + <td><p> + This field is the length of the object in the heap. It is + determined by taking the minimum value of <em>Maximum Direct + Block Size</em> and <em>Maximum Size of Managed Objects</em> in the <em>Fractal + Heap Header</em>. Again, the minimum number of bytes needed to encode + that value is used for the size of this field. + </p></td> </tr> + </table> +</div> + +<br /> +<h3> + <a name="FreeSpaceManager"> III.G. Disk Format: Level 1G - + Free-space Manager</a> +</h3> + +<p>Free-space managers are used to describe space within a heap or + the entire HDF5 file that is not currently used for that heap or file. +</p> + +<p> + The <em>free-space manager header</em> contains metadata information + about the space being tracked, along with the address of the list of <em>free + space sections</em> which actually describes the free space. The header + records information about free-space sections being tracked, creation + parameters for handling free-space sections of a client, and section + information used to locate the collection of free-space sections. +</p> + +<p> + The <em>free-space section list</em> stores a collection of free-space + sections that is specific to each <em>client</em> of the free-space + manager. For example, the fractal heap is a client of the free space + manager and uses it to track unused space within the heap. There are 4 + types of section records for the fractal heap, each of which has its + own format, listed below. +</p> + +<div align="center"> + <table class="format"> + <caption>Free-space Manager Header</caption> <tr> - <td colspan="4"><br />Total Space Tracked<sup>L</sup><br /><br /></td> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td colspan="4"><br />Total Number of Sections<sup>L</sup><br /><br /></td> + <td colspan="4">Signature</td> </tr> <tr> - <td colspan="4"><br />Number of Serialized Sections<sup>L</sup><br /><br /></td> - </tr> + <td>Version</td> + <td>Client ID</td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> - <tr> - <td colspan="4"><br />Number of Un-Serialized Sections<sup>L</sup><br /><br /></td> - </tr> + <tr> + <td colspan="4"><br />Total Space Tracked<sup>L</sup><br /> + <br /></td> + </tr> - <tr> - <td colspan="2">Number of Section Classes</td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> + <tr> + <td colspan="4"><br />Total Number of Sections<sup>L</sup><br /> + <br /></td> + </tr> <tr> - <td colspan="2">Shrink Percent</td> - <td colspan="2">Expand Percent</td> + <td colspan="4"><br />Number of Serialized Sections<sup>L</sup><br /> + <br /></td> </tr> <tr> - <td colspan="2">Size of Address Space</td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> + <td colspan="4"><br />Number of Un-Serialized Sections<sup>L</sup><br /> + <br /></td> + </tr> <tr> - <td colspan="4"><br />Maximum Section Size <sup>L</sup><br /><br /></td> - </tr> + <td colspan="2">Number of Section Classes</td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> <tr> - <td colspan="4"><br />Address of Serialized Section List<sup>O</sup><br /><br /></td> + <td colspan="2">Shrink Percent</td> + <td colspan="2">Expand Percent</td> </tr> <tr> - <td colspan="4"><br />Size of Serialized Section List Used<sup>L</sup><br /><br /></td> + <td colspan="2">Size of Address Space</td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> </tr> <tr> - <td colspan="4"><br />Allocated Size of Serialized Section List<sup>L</sup><br /><br /></td> - </tr> + <td colspan="4"><br />Maximum Section Size <sup>L</sup><br /> + <br /></td> + </tr> - <tr> - <td colspan="4">Checksum</td> - </tr> - </table> + <tr> + <td colspan="4"><br />Address of Serialized Section List<sup>O</sup><br /> + <br /></td> + </tr> - <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> + <td colspan="4"><br />Size of Serialized Section List Used<sup>L</sup><br /> + <br /></td> + </tr> + <tr> - <td> </td> - <td> - (Items marked with an ‘L’ in the above table are of the size - specified in “Size of Lengths” field in the superblock.) - </td></tr> - </table> + <td colspan="4"><br />Allocated Size of Serialized Section List<sup>L</sup><br /> + <br /></td> + </tr> - </div> + <tr> + <td colspan="4">Checksum</td> + </tr> + </table> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="35%">Field Name</th> - <th>Description</th> + <table class="note"> + <tr> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> + <tr> + <td> </td> + <td>(Items marked with an ‘L’ in the above table are + of the size specified in “Size of Lengths” field in the + superblock.)</td> </tr> + </table> + +</div> +<br /> +<div align="center"> + <table class="desc"> <tr> - <td><p>Signature</p></td> - <td> - <p>The ASCII character string “<code>FSHD</code>” is used to - indicate the beginning of the Free-space Manager Header. - This gives file consistency checking utilities a better chance of - reconstructing a damaged file. - </p> - </td> + <th width="35%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Version</p></td> - <td> - <p>This is the version number for the Free-space Manager Header - and this document describes version 0.</p> - </td> + <td><p>Signature</p></td> + <td> + <p> + The ASCII character string “ + <code>FSHD</code> + ” is used to indicate the beginning of the Free-space Manager + Header. This gives file consistency checking utilities a better + chance of reconstructing a damaged file. + </p> + </td> </tr> <tr> - <td><p>Client ID</p></td> - <td> - <p>This is the client ID for identifying the user of this - free-space manager: + <td><p>Version</p></td> + <td> + <p>This is the version number for the Free-space Manager Header + and this document describes version 0.</p> + </td> + </tr> + <tr> + <td><p>Client ID</p></td> + <td> + <p>This is the client ID for identifying the user of this + free-space manager:</p> <table class="list"> <tr> - <th width="20%" align="center">ID</th> - <th width="80%" align="left">Description</th> + <th width="20%" align="center">ID</th> + <th width="80%" align="left">Description</th> </tr> <tr> - <td align="center"><code>0</code></td> - <td>Fractal heap - </td> + <td align="center"><code>0</code></td> + <td>Fractal heap</td> </tr> <tr> - <td align="center"><code>1</code></td> - <td>File - </td> + <td align="center"><code>1</code></td> + <td>File</td> </tr> <tr> - <td align="center"><code>2+</code></td> - <td>Reserved. - </td> + <td align="center"><code>2+</code></td> + <td>Reserved.</td> </tr> - </table></p> + </table> + <p></p> - </td> + </td> </tr> - <tr> - <td><p>Total Space Tracked</p></td> - <td> - <p>This is the total amount of free space being tracked, in bytes. - </p> - </td> - </tr> + <tr> + <td><p>Total Space Tracked</p></td> + <td> + <p>This is the total amount of free space being tracked, in + bytes.</p> + </td> + </tr> <tr> - <td><p>Total Number of Sections</p></td> - <td> - <p>This is the total number of free-space sections being tracked. - </p> - </td> + <td><p>Total Number of Sections</p></td> + <td> + <p>This is the total number of free-space sections being + tracked.</p> + </td> </tr> - <tr> - <td><p>Number of Serialized Sections</p></td> - <td> - <p>This is the number of serialized free-space sections being - tracked. - </p> - </td> - </tr> - <tr> - <td><p>Number of Un-Serialized Sections</p></td> - <td> - <p>This is the number of un-serialized free-space sections being - managed. Un-serialized sections are created by the free-space - client when the list of sections is read in. - </p> - </td> + <tr> + <td><p>Number of Serialized Sections</p></td> + <td> + <p>This is the number of serialized free-space sections being + tracked.</p> + </td> + </tr> + <tr> + <td><p>Number of Un-Serialized Sections</p></td> + <td> + <p>This is the number of un-serialized free-space sections being + managed. Un-serialized sections are created by the free-space + client when the list of sections is read in.</p> + </td> </tr> <tr> - <td><p>Number of Section Classes</p></td> - <td> - <p>This is the number of section classes handled by this free space - manager for the free-space client. - </p> - </td> + <td><p>Number of Section Classes</p></td> + <td> + <p>This is the number of section classes handled by this free + space manager for the free-space client.</p> + </td> </tr> <tr> - <td><p>Shrink Percent</p></td> - <td> - <p>This is the percent of current size to shrink the allocated - serialized free-space section list. - </p> - </td> + <td><p>Shrink Percent</p></td> + <td> + <p>This is the percent of current size to shrink the allocated + serialized free-space section list.</p> + </td> </tr> <tr> - <td><p>Expand Percent</p></td> - <td> - <p>This is the percent of current size to expand the allocated - serialized free-space section list. - </p> - </td> + <td><p>Expand Percent</p></td> + <td> + <p>This is the percent of current size to expand the allocated + serialized free-space section list.</p> + </td> </tr> <tr> - <td><p>Size of Address Space</p></td> - <td> - <p>This is the size of the address space that free-space sections - are within. This is stored as the log<sub>2</sub> of the - actual value (in other words, the number of bits required - to store values within that address space). - </p> - </td> + <td><p>Size of Address Space</p></td> + <td> + <p> + This is the size of the address space that free-space sections are + within. This is stored as the log<sub>2</sub> of the actual value + (in other words, the number of bits required to store values within + that address space). + </p> + </td> </tr> <tr> - <td><p>Maximum Section Size</p></td> - <td> - <p>This is the maximum size of a section to be tracked. - </p> - </td> + <td><p>Maximum Section Size</p></td> + <td> + <p>This is the maximum size of a section to be tracked.</p> + </td> </tr> <tr> - <td><p>Address of Serialized Section List</p></td> - <td> - <p>This is the address where the serialized free-space section - list is stored. - </p> - </td> + <td><p>Address of Serialized Section List</p></td> + <td> + <p>This is the address where the serialized free-space section + list is stored.</p> + </td> </tr> <tr> - <td><p>Size of Serialized Section List Used</p></td> - <td> - <p>This is the size of the serialized free-space section - list used (in bytes). This value must be less than - or equal to the <em>allocated size of serialized section - list</em>, below. - </p> - </td> + <td><p>Size of Serialized Section List Used</p></td> + <td> + <p> + This is the size of the serialized free-space section list used (in + bytes). This value must be less than or equal to the <em>allocated + size of serialized section list</em>, below. + </p> + </td> </tr> <tr> - <td><p>Allocated Size of Serialized Section List</p></td> - <td> - <p>This is the size of serialized free-space section list - actually allocated (in bytes). - </p> - </td> + <td><p>Allocated Size of Serialized Section List</p></td> + <td> + <p>This is the size of serialized free-space section list + actually allocated (in bytes).</p> + </td> </tr> <tr> - <td><p>Checksum</p></td> - <td> - <p>This is the checksum for the free-space manager header.</p> - </td> + <td><p>Checksum</p></td> + <td> + <p>This is the checksum for the free-space manager header.</p> + </td> </tr> - </table> - </div> + </table> +</div> - <br /> - <p>The free-space sections being managed are stored in a - <em>free-space section list</em>, described below. The sections - in the free-space section list are stored in the following way: - a count of the number of sections describing a particular size of - free space and the size of the free-space described (in bytes), - followed by a list of section description records; then another - section count and size, followed by the list of section - descriptions for that size; and so on.</p> - - - <div align="center"> - <table class="format"> - <caption> - Free-space Section List - </caption> +<br /> +<p> + The free-space sections being managed are stored in a <em>free-space + section list</em>, described below. The sections in the free-space section + list are stored in the following way: a count of the number of sections + describing a particular size of free space and the size of the + free-space described (in bytes), followed by a list of section + description records; then another section count and size, followed by + the list of section descriptions for that size; and so on. +</p> + + +<div align="center"> + <table class="format"> + <caption>Free-space Section List</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td colspan="4">Signature</td> + <td colspan="4">Signature</td> </tr> <tr> - <td>Version</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> + <td>Version</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> </tr> <tr> - <td colspan="4"><br />Free-space Manager Header Address<sup>O</sup><br /><br /></td> + <td colspan="4"><br />Free-space Manager Header Address<sup>O</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4">Number of Section Records in Set #0 <em>(variable size)</em></td> + <td colspan="4">Number of Section Records in Set #0 <em>(variable + size)</em></td> </tr> <tr> - <td colspan="4">Size of Free-space Section Described in Record Set #0 <em>(variable size)</em></td> - </tr> + <td colspan="4">Size of Free-space Section Described in Record + Set #0 <em>(variable size)</em> + </td> + </tr> - <tr> - <td colspan="4">Record Set #0 Section Record #0 Offset<em>(variable size)</em></td> - </tr> + <tr> + <td colspan="4">Record Set #0 Section Record #0 Offset<em>(variable + size)</em></td> + </tr> - <tr> - <td colspan="1">Record Set #0 Section Record #0 Type</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> + <tr> + <td colspan="1">Record Set #0 Section Record #0 Type</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> - <tr> - <td colspan="4">Record Set #0 Section Record #0 Data <em>(variable size)</em></td> - </tr> + <tr> + <td colspan="4">Record Set #0 Section Record #0 Data <em>(variable + size)</em></td> + </tr> - <tr> - <td colspan="4">...</td> - </tr> + <tr> + <td colspan="4">...</td> + </tr> - <tr> - <td colspan="4">Record Set #0 Section Record #K-1 Offset<em>(variable size)</em></td> - </tr> + <tr> + <td colspan="4">Record Set #0 Section Record #K-1 Offset<em>(variable + size)</em></td> + </tr> - <tr> - <td colspan="1">Record Set #0 Section Record #K-1 Type</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> + <tr> + <td colspan="1">Record Set #0 Section Record #K-1 Type</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> - <tr> - <td colspan="4">Record Set #0 Section Record #K-1 Data <em>(variable size)</em></td> - </tr> + <tr> + <td colspan="4">Record Set #0 Section Record #K-1 Data <em>(variable + size)</em></td> + </tr> <tr> - <td colspan="4">Number of Section Records in Set #1 <em>(variable size)</em></td> + <td colspan="4">Number of Section Records in Set #1 <em>(variable + size)</em></td> </tr> <tr> - <td colspan="4">Size of Free-space Section Described in Record Set #1 <em>(variable size)</em></td> - </tr> + <td colspan="4">Size of Free-space Section Described in Record + Set #1 <em>(variable size)</em> + </td> + </tr> - <tr> - <td colspan="4">Record Set #1 Section Record #0 Offset<em>(variable size)</em></td> - </tr> + <tr> + <td colspan="4">Record Set #1 Section Record #0 Offset<em>(variable + size)</em></td> + </tr> - <tr> - <td colspan="1">Record Set #1 Section Record #0 Type</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> + <tr> + <td colspan="1">Record Set #1 Section Record #0 Type</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> - <tr> - <td colspan="4">Record Set #1 Section Record #0 Data <em>(variable size)</em></td> - </tr> + <tr> + <td colspan="4">Record Set #1 Section Record #0 Data <em>(variable + size)</em></td> + </tr> - <tr> - <td colspan="4">...</td> - </tr> + <tr> + <td colspan="4">...</td> + </tr> - <tr> - <td colspan="4">Record Set #1 Section Record #K-1 Offset<em>(variable size)</em></td> - </tr> + <tr> + <td colspan="4">Record Set #1 Section Record #K-1 Offset<em>(variable + size)</em></td> + </tr> - <tr> - <td colspan="1">Record Set #1 Section Record #K-1 Type</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> + <tr> + <td colspan="1">Record Set #1 Section Record #K-1 Type</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> - <tr> - <td colspan="4">Record Set #1 Section Record #K-1 Data <em>(variable size)</em></td> - </tr> + <tr> + <td colspan="4">Record Set #1 Section Record #K-1 Data <em>(variable + size)</em></td> + </tr> - <tr> - <td colspan="4"><strong>...</strong></td> - </tr> + <tr> + <td colspan="4"><strong>...</strong></td> + </tr> - <tr> - <td colspan="4"><strong>...</strong></td> - </tr> + <tr> + <td colspan="4"><strong>...</strong></td> + </tr> <tr> - <td colspan="4">Number of Section Records in Set #N-1 <em>(variable size)</em></td> + <td colspan="4">Number of Section Records in Set #N-1 <em>(variable + size)</em></td> </tr> <tr> - <td colspan="4">Size of Free-space Section Described in Record Set #N-1 <em>(variable size)</em></td> - </tr> + <td colspan="4">Size of Free-space Section Described in Record + Set #N-1 <em>(variable size)</em> + </td> + </tr> - <tr> - <td colspan="4">Record Set #N-1 Section Record #0 Offset<em>(variable size)</em></td> - </tr> + <tr> + <td colspan="4">Record Set #N-1 Section Record #0 Offset<em>(variable + size)</em></td> + </tr> - <tr> - <td colspan="1">Record Set #N-1 Section Record #0 Type</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> + <tr> + <td colspan="1">Record Set #N-1 Section Record #0 Type</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> - <tr> - <td colspan="4">Record Set #N-1 Section Record #0 Data <em>(variable size)</em></td> - </tr> + <tr> + <td colspan="4">Record Set #N-1 Section Record #0 Data <em>(variable + size)</em></td> + </tr> - <tr> - <td colspan="4">...</td> - </tr> + <tr> + <td colspan="4">...</td> + </tr> - <tr> - <td colspan="4">Record Set #N-1 Section Record #K-1 Offset<em>(variable size)</em></td> - </tr> + <tr> + <td colspan="4">Record Set #N-1 Section Record #K-1 Offset<em>(variable + size)</em></td> + </tr> - <tr> - <td colspan="1">Record Set #N-1 Section Record #K-1 Type</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> + <tr> + <td colspan="1">Record Set #N-1 Section Record #K-1 Type</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> - <tr> - <td colspan="4">Record Set #N-1 Section Record #K-1 Data <em>(variable size)</td> - </tr> + <tr> + <td colspan="4">Record Set #N-1 Section Record #K-1 Data <em>(variable + size)</em></td> + </tr> - <tr> - <td colspan="4">Checksum</td> - </tr> - </table> + <tr> + <td colspan="4">Checksum</td> + </tr> + </table> - <table class="note"> + <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> - </table> - </div> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> + </table> +</div> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="35%">Field Name</th> - <th>Description</th> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="35%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Signature</p></td> - <td> - <p>The ASCII character string “<code>FSSE</code>” is used to - indicate the beginning of the Free-space Section Information. - This gives file consistency checking utilities a better chance of - reconstructing a damaged file. - </p> - </td> + <td><p>Signature</p></td> + <td> + <p> + The ASCII character string “ + <code>FSSE</code> + ” is used to indicate the beginning of the Free-space Section + Information. This gives file consistency checking utilities a + better chance of reconstructing a damaged file. + </p> + </td> </tr> <tr> - <td><p>Version</p></td> - <td> - <p>This is the version number for the Free-space Section List - and this document describes version 0.</p> - </td> + <td><p>Version</p></td> + <td> + <p>This is the version number for the Free-space Section List + and this document describes version 0.</p> + </td> </tr> <tr> - <td><p>Free-space Manager Header Address</p></td> - <td> - <p>This is the address of the <em>Free-space Manager Header</em>. - This field is principally used for file - integrity checking. - </p> - </td> + <td><p>Free-space Manager Header Address</p></td> + <td> + <p> + This is the address of the <em>Free-space Manager Header</em>. This + field is principally used for file integrity checking. + </p> + </td> </tr> - <tr> - <td><p>Number of Section Records for Set #N</p></td> - <td> - <p>This is the number of free-space section records for set #N. - The length of this field is the minimum number of bytes needed - to store the <em>number of serialized sections</em> (from the - <em>free-space manager header</em>). - </p> + <tr> + <td><p>Number of Section Records for Set #N</p></td> + <td> + <p> + This is the number of free-space section records for set #N. The + length of this field is the minimum number of bytes needed to store + the <em>number of serialized sections</em> (from the <em>free-space + manager header</em>). + </p> - <p> - The number of sets of free-space section records is - determined by the <em>size of serialized section list</em> in - the <em>free-space manager header</em>. - </p> - </td> - </tr> + <p> + The number of sets of free-space section records is determined by + the <em>size of serialized section list</em> in the <em>free-space + manager header</em>. + </p> + </td> + </tr> <tr> - <td><p>Section Size for Record Set #N</p></td> - <td> - <p>This is the size (in bytes) of the free-space section described - for <em>all</em> the section records in set #N. - </p> + <td><p>Section Size for Record Set #N</p></td> + <td> + <p> + This is the size (in bytes) of the free-space section described for + <em>all</em> the section records in set #N. + </p> - <p> - The length of this field is the minimum number of bytes needed - to store the <em>maximum section size</em> (from the - <em>free-space manager header</em>). - </p> - </td> + <p> + The length of this field is the minimum number of bytes needed to + store the <em>maximum section size</em> (from the <em>free-space + manager header</em>). + </p> + </td> </tr> <tr> - <td><p>Record Set #N Section #K Offset</p></td> - <td> - <p>This is the offset (in bytes) of the free-space section within - the client for the free-space manager. - </p> + <td><p>Record Set #N Section #K Offset</p></td> + <td> + <p>This is the offset (in bytes) of the free-space section + within the client for the free-space manager.</p> - <p> - The length of this field is the minimum number of bytes needed - to store the <em>size of address space</em> (from the - <em>free-space manager header</em>). - </p> - </td> + <p> + The length of this field is the minimum number of bytes needed to + store the <em>size of address space</em> (from the <em>free-space + manager header</em>). + </p> + </td> </tr> <tr> - <td><p>Record Set #N Section #K Type</p></td> - <td> - <p>This is the type of the section record, used to decode the - <em>record set #N section #K data</em> information. The defined - record type for <em>file</em> client is: + <td><p>Record Set #N Section #K Type</p></td> + <td> + <p> + This is the type of the section record, used to decode the <em>record + set #N section #K data</em> information. The defined record type for <em>file</em> + client is: + </p> <table class="list"> <tr> - <th width="20%" align="center">Type</th> - <th width="80%" align="left">Description</th> + <th width="20%" align="center">Type</th> + <th width="80%" align="left">Description</th> </tr> <tr> - <td align="center"><code>0</code></td> - <td>File’s section (a range of actual bytes in file) - </td> + <td align="center"><code>0</code></td> + <td>File’s section (a range of actual bytes in file)</td> </tr> <tr> - <td align="center"><code>1+</code></td> - <td>Reserved. - </td> + <td align="center"><code>1+</code></td> + <td>Reserved.</td> </tr> - </table></p> + </table> + <p></p> - <p>The defined record types for a <em>fractal heap</em> client are: + <p> + The defined record types for a <em>fractal heap</em> client are: + </p> <table class="list"> <tr> - <th width="20%" align="center">Type</th> - <th width="80%" align="left">Description</th> + <th width="20%" align="center">Type</th> + <th width="80%" align="left">Description</th> </tr> <tr> - <td align="center"><code>0</code></td> - <td>Fractal heap “single” section - </td> + <td align="center"><code>0</code></td> + <td>Fractal heap “single” section</td> </tr> <tr> - <td align="center"><code>1</code></td> - <td>Fractal heap “first row” section - </td> + <td align="center"><code>1</code></td> + <td>Fractal heap “first row” section</td> </tr> <tr> - <td align="center"><code>2</code></td> - <td>Fractal heap “normal row” section - </td> + <td align="center"><code>2</code></td> + <td>Fractal heap “normal row” section</td> </tr> <tr> - <td align="center"><code>3</code></td> - <td>Fractal heap “indirect” section - </td> + <td align="center"><code>3</code></td> + <td>Fractal heap “indirect” section</td> </tr> <tr> - <td align="center"><code>4+</code></td> - <td>Reserved. - </td> + <td align="center"><code>4+</code></td> + <td>Reserved.</td> </tr> - </table></p> + </table> + <p></p> - </td> + </td> </tr> <tr> - <td><p>Record Set #N Section #K Data</p></td> - <td> - <p>This is the section-type specific information for each record - in the record set, described below. - </p> - </td> + <td><p>Record Set #N Section #K Data</p></td> + <td> + <p>This is the section-type specific information for each record + in the record set, described below.</p> + </td> </tr> <tr> - <td><p>Checksum</p></td> - <td> - <p>This is the checksum for the <em>Free-space Section List</em>. - </p> - </td> + <td><p>Checksum</p></td> + <td> + <p> + This is the checksum for the <em>Free-space Section List</em>. + </p> + </td> </tr> - </table> - </div> + </table> +</div> - <br /> - <p> - The section-type specific data for each free-space section record is - described below: - </p> +<br /> +<p>The section-type specific data for each free-space section record + is described below:</p> - <div align="center"> - <table class="format"> - <caption> - File’s Section Data Record - </caption> +<div align="center"> + <table class="format"> + <caption>File’s Section Data Record</caption> <tr> - <td colspan="4"><em>No additional record data stored</em></td> + <td colspan="4"><em>No additional record data stored</em></td> </tr> - </table> - </div> + </table> +</div> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Fractal Heap “Single” Section Data Record - </caption> +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Fractal Heap “Single” Section Data + Record</caption> <tr> - <td colspan="4"><em>No additional record data stored</em></td> + <td colspan="4"><em>No additional record data stored</em></td> </tr> - </table> - </div> + </table> +</div> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Fractal Heap “First Row” Section Data Record - </caption> +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Fractal Heap “First Row” Section Data + Record</caption> <tr> - <td colspan="4"><em>Same format as “indirect” section data</em></td> + <td colspan="4"><em>Same format as “indirect” + section data</em></td> </tr> - </table> - </div> + </table> +</div> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Fractal Heap “Normal Row” Section Data Record - </caption> +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Fractal Heap “Normal Row” Section Data + Record</caption> <tr> - <td colspan="4"><em>No additional record data stored</em></td> + <td colspan="4"><em>No additional record data stored</em></td> </tr> - </table> - </div> + </table> +</div> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Fractal Heap “Indirect” Section Data Record - </caption> +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Fractal Heap “Indirect” Section Data + Record</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td colspan="4">Fractal Heap Indirect Block Offset <em>(variable size)</em></td> + <td colspan="4">Fractal Heap Indirect Block Offset <em>(variable + size)</em></td> </tr> <tr> - <td colspan="2">Block Start Row</td> - <td colspan="2">Block Start Column</td> + <td colspan="2">Block Start Row</td> + <td colspan="2">Block Start Column</td> </tr> <tr> - <td colspan="2">Number of Blocks</td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> + <td colspan="2">Number of Blocks</td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> </tr> - </table> - </div> + </table> +</div> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Fractal Heap Block Offset</p></td> - <td> - <p>The offset of the indirect block in the fractal heap’s address - space containing the empty blocks. - </p> - <p> - The number of bytes used to encode this field is the minimum - number of bytes needed to encode values for the <em>Maximum - Heap Size</em> (in the fractal heap’s header). - </p> - </td> + <td><p>Fractal Heap Block Offset</p></td> + <td> + <p>The offset of the indirect block in the fractal heap’s + address space containing the empty blocks.</p> + <p> + The number of bytes used to encode this field is the minimum number + of bytes needed to encode values for the <em>Maximum Heap Size</em> + (in the fractal heap’s header). + </p> + </td> </tr> <tr> - <td><p>Block Start Row</p></td> - <td> - <p>This is the row that the empty blocks start in. - </p> - </td> + <td><p>Block Start Row</p></td> + <td> + <p>This is the row that the empty blocks start in.</p> + </td> </tr> <tr> - <td><p>Block Start Column</p></td> - <td> - <p>This is the column that the empty blocks start in. - </p> - </td> + <td><p>Block Start Column</p></td> + <td> + <p>This is the column that the empty blocks start in.</p> + </td> </tr> <tr> - <td><p>Number of Blocks</p></td> - <td> - <p>This is the number of empty blocks covered by the section. - </p> - </td> + <td><p>Number of Blocks</p></td> + <td> + <p>This is the number of empty blocks covered by the section.</p> + </td> </tr> - </table> - </div> - -<br /> -<h3><a name="SOHMTable"> -III.H. Disk Format: Level 1H - Shared Object Header Message Table</a></h3> - - <p> - The <em>shared object header message table</em> is used to locate - object - header messages that are shared between two or more object headers - in the file. Shared object header messages are stored and indexed - in the file in one of two ways: indexed sequentially in a - <em>shared header message list</em> or indexed with a v2 B-tree. - The shared messages themselves are either stored in a fractal - heap (when two or more objects share the message), or remain in an - object’s header (when only one object uses the message currently, - but the message can be shared in the future). - </p> - - <p> - The <em>shared object header message table</em> - contains a list of shared message index headers. Each index header - records information about the version of the index format, the index - storage type, flags for the message types indexed, the number of - messages in the index, the address where the index resides, - and the fractal heap address if shared messages are stored there. - </p> - - <p> - Each index can be either a list or a v2 B-tree and may transition - between those two forms as the number of messages in the index - varies. Each shared message record contains information used to - locate the shared message from either a fractal heap or an object - header. The types of messages that can be shared are: <em>Dataspace, - Datatype, Fill Value, Filter Pipeline and Attribute</em>. - </p> - - <p> - The <em>shared object header message table</em> is pointed to - from a <a href="#SOHMTableMessage">shared message table</a> message - in the superblock extension for a file. This message stores the - version of the table format, along with the number of index headers - in the table. - </p> - - <div align="center"> - <table class="format"> - <caption> - Shared Object Header Message Table - </caption> + </table> +</div> + +<br /> +<h3> + <a name="SOHMTable"> III.H. Disk Format: Level 1H - Shared Object + Header Message Table</a> +</h3> + +<p> + The <em>shared object header message table</em> is used to locate + object header messages that are shared between two or more object + headers in the file. Shared object header messages are stored and + indexed in the file in one of two ways: indexed sequentially in a <em>shared + header message list</em> or indexed with a v2 B-tree. The shared messages + themselves are either stored in a fractal heap (when two or more + objects share the message), or remain in an object’s header (when + only one object uses the message currently, but the message can be + shared in the future). +</p> + +<p> + The <em>shared object header message table</em> contains a list of + shared message index headers. Each index header records information + about the version of the index format, the index storage type, flags + for the message types indexed, the number of messages in the index, the + address where the index resides, and the fractal heap address if shared + messages are stored there. +</p> + +<p> + Each index can be either a list or a v2 B-tree and may transition + between those two forms as the number of messages in the index varies. + Each shared message record contains information used to locate the + shared message from either a fractal heap or an object header. The + types of messages that can be shared are: <em>Dataspace, Datatype, + Fill Value, Filter Pipeline and Attribute</em>. +</p> + +<p> + The <em>shared object header message table</em> is pointed to from a <a + href="#SOHMTableMessage">shared message table</a> message in the + superblock extension for a file. This message stores the version of the + table format, along with the number of index headers in the table. +</p> + +<div align="center"> + <table class="format"> + <caption>Shared Object Header Message Table</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td colspan="4">Signature</td> + <td colspan="4">Signature</td> </tr> <tr> - <td>Version for index #0</td> - <td>Index Type for index #0</td> - <td colspan="2">Message Type Flags for index #0</td> + <td>Version for index #0</td> + <td>Index Type for index #0</td> + <td colspan="2">Message Type Flags for index #0</td> </tr> <tr> - <td colspan="4">Minimum Message Size for index #0</td> + <td colspan="4">Minimum Message Size for index #0</td> </tr> <tr> - <td colspan="2">List Cutoff for index #0</td> - <td colspan="2">v2 B-tree Cutoff for index #0</td> + <td colspan="2">List Cutoff for index #0</td> + <td colspan="2">v2 B-tree Cutoff for index #0</td> </tr> <tr> - <td colspan="2">Number of Messages for index #0</td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> + <td colspan="2">Number of Messages for index #0</td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> - <tr> - <td colspan="4"><br />Index Address<sup>O</sup> for index #0<br /><br /></td> - </tr> + <tr> + <td colspan="4"><br />Index Address<sup>O</sup> for index #0<br /> + <br /></td> + </tr> - <tr> - <td colspan="4"><br />Fractal Heap Address<sup>O</sup> for index #0<br /><br /></td> - </tr> + <tr> + <td colspan="4"><br />Fractal Heap Address<sup>O</sup> for + index #0<br /> + <br /></td> + </tr> <tr> - <td colspan="4">...</td> - </tr> + <td colspan="4">...</td> + </tr> <tr> - <td colspan="4">...</td> - </tr> + <td colspan="4">...</td> + </tr> <tr> - <td>Version for index #N-1</td> - <td>Index Type for index #N-1</td> - <td colspan="2">Message Type Flags for index #N-1</td> + <td>Version for index #N-1</td> + <td>Index Type for index #N-1</td> + <td colspan="2">Message Type Flags for index #N-1</td> </tr> <tr> - <td colspan="4">Minimum Message Size for index #N-1</td> + <td colspan="4">Minimum Message Size for index #N-1</td> </tr> <tr> - <td colspan="2">List Cutoff for index #N-1</td> - <td colspan="2">v2 B-tree Cutoff for index #N-1</td> + <td colspan="2">List Cutoff for index #N-1</td> + <td colspan="2">v2 B-tree Cutoff for index #N-1</td> </tr> <tr> - <td colspan="2">Number of Messages for index #N-1</td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> + <td colspan="2">Number of Messages for index #N-1</td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> - <tr> - <td colspan="4"><br />Index Address<sup>O</sup> for index #N-1<br /><br /></td> - </tr> + <tr> + <td colspan="4"><br />Index Address<sup>O</sup> for index #N-1<br /> + <br /></td> + </tr> - <tr> - <td colspan="4"><br />Fractal Heap Address<sup>O</sup> for index #N-1<br /><br /></td> - </tr> + <tr> + <td colspan="4"><br />Fractal Heap Address<sup>O</sup> for + index #N-1<br /> + <br /></td> + </tr> - <tr> - <td colspan="4">Checksum</td> - </tr> - </table> + <tr> + <td colspan="4">Checksum</td> + </tr> + </table> - <table class="note"> + <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> - </table> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> + </table> - </div> +</div> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="35%">Field Name</th> - <th>Description</th> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="35%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Signature</p></td> - <td> - <p>The ASCII character string “<code>SMTB</code>” is used to - indicate the beginning of the Shared Object Header Message table. - This gives file consistency checking utilities a better chance of - reconstructing a damaged file. - </p> - </td> + <td><p>Signature</p></td> + <td> + <p> + The ASCII character string “ + <code>SMTB</code> + ” is used to indicate the beginning of the Shared Object + Header Message table. This gives file consistency checking + utilities a better chance of reconstructing a damaged file. + </p> + </td> </tr> <tr> - <td><p>Version for index #N</p></td> - <td> - <p>This is the version number for the list of shared object header message - indexes and this document describes version 0.</p> - </td> + <td><p>Version for index #N</p></td> + <td> + <p>This is the version number for the list of shared object + header message indexes and this document describes version 0.</p> + </td> </tr> <tr> - <td><p>Index Type for index #N</p></td> - <td> - <p>The type of index can be an unsorted list or a v2 B-tree. - </p> - </td> + <td><p>Index Type for index #N</p></td> + <td> + <p>The type of index can be an unsorted list or a v2 B-tree.</p> + </td> </tr> - <tr> - <td><p>Message Type Flags for index #N</p></td> - <td> - <p>This field indicates the type of messages tracked in the index, - as follows: + <tr> + <td><p>Message Type Flags for index #N</p></td> + <td> + <p>This field indicates the type of messages tracked in the + index, as follows:</p> <table class="list"> <tr> - <th width="20%" align="center">Bits</th> - <th width="80%" align="left">Description</th> + <th width="20%" align="center">Bits</th> + <th width="80%" align="left">Description</th> </tr> <tr> - <td align="center"><code>0</code></td> - <td>If set, the index tracks <em>Dataspace Messages</em>. - </td> + <td align="center"><code>0</code></td> + <td>If set, the index tracks <em>Dataspace Messages</em>. + </td> </tr> <tr> - <td align="center"><code>1</code></td> - <td>If set, the message tracks <em>Datatype Messages</em>. - </td> + <td align="center"><code>1</code></td> + <td>If set, the message tracks <em>Datatype Messages</em>. + </td> </tr> <tr> - <td align="center"><code>2</code></td> - <td>If set, the message tracks <em>Fill Value Messages</em>. - </td> + <td align="center"><code>2</code></td> + <td>If set, the message tracks <em>Fill Value Messages</em>. + </td> </tr> <tr> - <td align="center"><code>3</code></td> - <td>If set, the message tracks <em>Filter Pipeline Messages</em>. - </td> + <td align="center"><code>3</code></td> + <td>If set, the message tracks <em>Filter Pipeline + Messages</em>. + </td> </tr> <tr> - <td align="center"><code>4</code></td> - <td>If set, the message tracks <em>Attribute Messages</em>. - </td> + <td align="center"><code>4</code></td> + <td>If set, the message tracks <em>Attribute Messages</em>. + </td> </tr> <tr> - <td align="center"><code>5-15</code></td> - <td>Reserved (zero). - </td> + <td align="center"><code>5-15</code></td> + <td>Reserved (zero).</td> </tr> - </table></p> + </table> + <p></p> - <p> - An index can track more than one type of message, but each type - of message can only by in one index. - </p> - </td> - </tr> + <p>An index can track more than one type of message, but each + type of message can only by in one index.</p> + </td> + </tr> <tr> - <td><p>Minimum Message Size for index #N</p></td> - <td> - <p>This is the message size sharing threshold for the index. - If the encoded size of the message is less than this value, the - message is not shared. - </p> - </td> + <td><p>Minimum Message Size for index #N</p></td> + <td> + <p>This is the message size sharing threshold for the index. If + the encoded size of the message is less than this value, the + message is not shared.</p> + </td> </tr> - <tr> - <td><p>List Cutoff for index #N</p></td> - <td> - <p>This is the cutoff value for the indexing of messages to - switch from a list to a v2 B-tree. If the number of messages - is greater than this value, the index should be a v2 B-tree. - </p> - </td> - </tr> - <tr> - <td><p>v2 B-tree Cutoff for index #N</p></td> - <td> - <p>This is is the cutoff value for the indexing of messages to - switch from a v2 B-tree back to a list. If the number of - messages is less than this value, the index should be a list. - </p> - </td> + <tr> + <td><p>List Cutoff for index #N</p></td> + <td> + <p>This is the cutoff value for the indexing of messages to + switch from a list to a v2 B-tree. If the number of messages is + greater than this value, the index should be a v2 B-tree.</p> + </td> + </tr> + <tr> + <td><p>v2 B-tree Cutoff for index #N</p></td> + <td> + <p>This is the cutoff value for the indexing of messages to + switch from a v2 B-tree back to a list. If the number of messages + is less than this value, the index should be a list.</p> + </td> </tr> <tr> - <td><p>Number of Messages for index #N</p></td> - <td> - <p>The number of shared messages being tracked for the index. - </p> - </td> + <td><p>Number of Messages for index #N</p></td> + <td> + <p>The number of shared messages being tracked for the index.</p> + </td> </tr> <tr> - <td><p>Index Address for index #N</p></td> - <td> - <p>This field is the address of the list or v2 B-tree where the - index nodes reside. - </p> - </td> + <td><p>Index Address for index #N</p></td> + <td> + <p>This field is the address of the list or v2 B-tree where the + index nodes reside.</p> + </td> </tr> <tr> - <td><p>Fractal Heap Address for index #N</p></td> - <td> - <p>This field is the address of the fractal heap if shared messages - are stored there. - </p> - </td> + <td><p>Fractal Heap Address for index #N</p></td> + <td> + <p>This field is the address of the fractal heap if shared + messages are stored there.</p> + </td> </tr> <tr> - <td><p>Checksum</p></td> - <td> - <p>This is the checksum for the table.</p> - </td> + <td><p>Checksum</p></td> + <td> + <p>This is the checksum for the table.</p> + </td> </tr> - </table> - </div> + </table> +</div> - <br /> - <p> - Shared messages are indexed either with a <em>shared message record - list</em>, described below, or using a v2 B-tree (using record type 7). - The number of records in the <em>shared message record list</em> is - determined in the index’s entry in the <em>shared object header message - table</em>. - </p> - - <div align="center"> - <table class="format"> - <caption> - Shared Message Record List - </caption> +<br /> +<p> + Shared messages are indexed either with a <em>shared message + record list</em>, described below, or using a v2 B-tree (using record type + 7). The number of records in the <em>shared message record list</em> is + determined in the index’s entry in the <em>shared object + header message table</em>. +</p> + +<div align="center"> + <table class="format"> + <caption>Shared Message Record List</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td colspan="4">Signature</td> + <td colspan="4">Signature</td> </tr> <tr> - <td colspan="4">Shared Message Record #0</td> + <td colspan="4">Shared Message Record #0</td> </tr> <tr> - <td colspan="4">Shared Message Record #1</td> + <td colspan="4">Shared Message Record #1</td> </tr> <tr> - <td colspan="4">...</td> + <td colspan="4">...</td> </tr> <tr> - <td colspan="4">Shared Message Record #N-1</td> + <td colspan="4">Shared Message Record #N-1</td> </tr> <tr> - <td colspan="4">Checksum</td> + <td colspan="4">Checksum</td> </tr> - </table> - </div> + </table> +</div> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Signature</p></td> - <td> - <p>The ASCII character string “<code>SMLI</code>” is used to - indicate the beginning of a list of index nodes. - This gives file consistency checking utilities a better chance of - reconstructing a damaged file. - </p> - </td> + <td><p>Signature</p></td> + <td> + <p> + The ASCII character string “ + <code>SMLI</code> + ” is used to indicate the beginning of a list of index nodes. + This gives file consistency checking utilities a better chance of + reconstructing a damaged file. + </p> + </td> </tr> <tr> - <td><p>Shared Message Record #N</p></td> - <td> - <p>The record for locating the shared message, either in the - fractal heap for the index, or an object header (see format for - <em>index nodes</em> below). - </p> - </td> + <td><p>Shared Message Record #N</p></td> + <td> + <p> + The record for locating the shared message, either in the fractal + heap for the index, or an object header (see format for <em>index + nodes</em> below). + </p> + </td> </tr> <tr> - <td><p>Checksum</p></td> - <td> - <p>This is the checksum for the list. - </p> - </td> + <td><p>Checksum</p></td> + <td> + <p>This is the checksum for the list.</p> + </td> </tr> - </table> - </div> + </table> +</div> - <br /> - <p> - The record for each shared message in an index is stored in one of the - following forms: - </p> +<br /> +<p>The record for each shared message in an index is stored in one + of the following forms:</p> - <div align="center"> - <table class="format"> - <caption> - Shared Message Record, for messages stored in a fractal heap - </caption> +<div align="center"> + <table class="format"> + <caption>Shared Message Record, for messages stored in a + fractal heap</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td>Message Location</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> + <td>Message Location</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> </tr> <tr> - <td colspan="4">Hash Value</td> + <td colspan="4">Hash Value</td> </tr> <tr> - <td colspan="4">Reference Count</td> + <td colspan="4">Reference Count</td> </tr> <tr> - <td colspan="4"><br />Fractal Heap ID<br /><br /></td> + <td colspan="4"><br />Fractal Heap ID<br /> + <br /></td> </tr> - </table> - </div> + </table> +</div> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Message Location</p></td> - <td> - <p>This has a value of 0 indicating that the message is stored in - the heap. - </p> - </td> + <td><p>Message Location</p></td> + <td> + <p>This has a value of 0 indicating that the message is stored + in the heap.</p> + </td> </tr> <tr> - <td><p>Hash Value</p></td> - <td> - <p>This is the hash value for the message. - </p> - </td> + <td><p>Hash Value</p></td> + <td> + <p>This is the hash value for the message.</p> + </td> </tr> <tr> - <td><p>Reference Count</p></td> - <td> - <p>This is the number of times the message is used in the file. - </p> - </td> + <td><p>Reference Count</p></td> + <td> + <p>This is the number of times the message is used in the file. + </p> + </td> </tr> <tr> - <td><p>Fractal Heap ID</p></td> - <td> - <p>This is an 8-byte fractal heap ID for the message as stored in - the fractal heap for the index. - </p> - </td> + <td><p>Fractal Heap ID</p></td> + <td> + <p>This is an 8-byte fractal heap ID for the message as stored + in the fractal heap for the index.</p> + </td> </tr> - </table> - </div> + </table> +</div> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Shared Message Record, for messages stored in an object header - </caption> +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Shared Message Record, for messages stored in an + object header</caption> <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> <tr> - <td>Message Location</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> + <td>Message Location</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> </tr> <tr> - <td colspan="4">Hash Value</td> + <td colspan="4">Hash Value</td> </tr> <tr> - <td>Reserved</td> - <td>Message Type</td> - <td colspan="2">Creation Index</td> + <td>Reserved</td> + <td>Message Type</td> + <td colspan="2">Creation Index</td> </tr> <tr> - <td colspan="4"><br />Object Header Address<sup>O</sup><br /><br /></td> + <td colspan="4"><br />Object Header Address<sup>O</sup><br /> + <br /></td> </tr> - </table> + </table> - <table class="note"> + <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> - </table> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> + </table> - </div> +</div> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Message Location</p></td> - <td> - <p>This has a value of 1 indicating that the message is stored in - an object header. - </p> - </td> + <td><p>Message Location</p></td> + <td> + <p>This has a value of 1 indicating that the message is stored + in an object header.</p> + </td> </tr> <tr> - <td><p>Hash Value</p></td> - <td> - <p>This is the hash value for the message. - </p> - </td> + <td><p>Hash Value</p></td> + <td> + <p>This is the hash value for the message.</p> + </td> </tr> <tr> - <td><p>Message Type</p></td> - <td> - <p>This is the message type in the object header. - </p> - </td> + <td><p>Message Type</p></td> + <td> + <p>This is the message type in the object header.</p> + </td> </tr> <tr> - <td><p>Creation Index</p></td> - <td> - <p>This is the creation index of the message within the object - header. - </p> - </td> + <td><p>Creation Index</p></td> + <td> + <p>This is the creation index of the message within the object + header.</p> + </td> </tr> <tr> - <td><p>Object Header Address</p></td> - <td> - <p>This is the address of the object header where the message is - located. - </p> - </td> + <td><p>Object Header Address</p></td> + <td> + <p>This is the address of the object header where the message is + located.</p> + </td> </tr> - </table> - </div> + </table> +</div> <br /> <br /> <hr /> -<h2><a name="DataObject"> -IV. Disk Format: Level 2 - Data Objects </a></h2> - - <p>Data objects contain the “real” user-visible information in the file. - These objects compose the scientific data and other information which - are generally thought of as “data” by the end-user. All the - other information in the file is provided as a framework for - storing and accessing these data objects. - </p> - - <p>A data object is composed of header and data - information. The header information contains the information - needed to interpret the data information for the object as - well as additional “metadata” or pointers to additional - “metadata” used to describe or annotate each object. - </p> - -<br /> -<h3><a name="ObjectHeader"> -IV.A. Disk Format: Level 2A - Data Object Headers</a></h3> - - <p>The header information of an object is designed to encompass - all of the information about an object, except for the data itself. - This information includes the dataspace, the datatype, information - about how the data is stored on disk (in external files, compressed, - broken up in blocks, and so on), as well as other information used - by the library to speed up access to the data objects or maintain - a file’s integrity. Information stored by user applications - as attributes is also stored in the object’s header. The header - of each object is not necessarily located immediately prior to the - object’s data in the file and in fact may be located in any - position in the file. The order of the messages in an object header - is not significant.</p> - - <p>Object headers are composed of a prefix and a set of messages. The - prefix contains the information needed to interpret the messages and - a small amount of metadata about the object, and the messages contain - the majority of the metadata about the object. - </p> - -<br /> -<h3><a name="ObjectHeaderPrefix"> -IV.A.1. Disk Format: Level 2A1 - Data Object Header Prefix</a></h3> - -<br /> -<h4><a name="V1ObjectHeaderPrefix"> -IV.A.1.a. Version 1 Data Object Header Prefix</a></h4> - - <p>Header messages are aligned on 8-byte boundaries for version 1 - object headers. - </p> - - <div align="center"> - <table class="format"> - <caption> - Version 1 Object Header - </caption> - - <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> - </tr> - - <tr> - <td>Version</td> - <td>Reserved (zero)</td> - <td colspan="2">Total Number of Header Messages</td> - </tr> - - <tr> - <td colspan="4">Object Reference Count</td> - </tr> - - <tr> - <td colspan="4">Object Header Size</td> - </tr> - - <tr> - <td colspan="2">Header Message Type #1</td> - <td colspan="2">Size of Header Message Data #1</td> - </tr> - - <tr> - <td>Header Message #1 Flags</td> - <td colspan="3">Reserved (zero)</td> - </tr> - - <tr> - <td colspan="4"><br />Header Message Data #1<br /><br /></td> - </tr> - - <tr> - <td colspan="4">.<br />.<br />.<br /></td> - </tr> - - <tr> - <td colspan="2">Header Message Type #n</td> - <td colspan="2">Size of Header Message Data #n</td> - </tr> - - <tr> - <td>Header Message #n Flags</td> - <td colspan="3">Reserved (zero)</td> - </tr> - - <tr> - <td colspan="4"><br />Header Message Data #n<br /><br /></td> - </tr> - </table> - </div> +<h2> + <a name="DataObject"> IV. Disk Format: Level 2 - Data Objects </a> +</h2> + +<p>Data objects contain the “real” user-visible + information in the file. These objects compose the scientific data and + other information which are generally thought of as “data” + by the end-user. All the other information in the file is provided as a + framework for storing and accessing these data objects.</p> + +<p>A data object is composed of header and data information. The + header information contains the information needed to interpret the + data information for the object as well as additional + “metadata” or pointers to additional “metadata” + used to describe or annotate each object.</p> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version</p></td> - <td> - <p>This value is used to determine the format of the - information in the object header. When the format of the - object header is changed, the version number - is incremented and can be used to determine how the - information in the object header is formatted. This - is version one (1) (there was no version zero (0)) of the - object header. - </p> - </td> - </tr> - - <tr> - <td><p>Total Number of Header Messages</p></td> - <td> - <p>This value determines the total number of messages listed in - object headers for this object. This value includes the messages - in continuation messages for this object. - </p> - </td> - </tr> - - <tr> - <td><p>Object Reference Count</p></td> - <td> - <p>This value specifies the number of “hard links” to this object - within the current file. References to the object from external - files, “soft links” in this file and object references in this - file are not tracked. - </p> - </td> - </tr> - - <tr> - <td><p>Object Header Size</p></td> - <td> - <p>This value specifies the number of bytes of header message data - following this length field that contain object header messages - for this object header. This value does not include the size of - object header continuation blocks for this object elsewhere in the - file. - </p> - </td> - </tr> - - <tr> - <td><p>Header Message #n Type</p></td> - <td> - <p>This value specifies the type of information included in the - following header message data. The message types for - header messages are defined in sections below. - </p> - </td> - </tr> - - <tr> - <td><p>Size of Header Message #n Data</p></td> - <td> - <p>This value specifies the number of bytes of header - message data following the header message type and length - information for the current message. The size includes - padding bytes to make the message a multiple of eight - bytes. - </p> - </td> - </tr> - - <tr> - <td><p>Header Message #n Flags</p></td> - <td> - <p>This is a bit field with the following definition: - <table class="list"> - <tr> - <th width="20%" align="center">Bit</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>If set, the message data is constant. This is used - for messages like the datatype message of a dataset. - </td> - </tr> - <tr> - <td align="center"><code>1</code></td> - <td>If set, the message is <em>shared</em> and stored - in another location than the object header. The Header - Message Data field contains a Shared Message - (described in the <a href="#ObjectHeaderMessages">Data Object Header Messages</a> - section below) - and the Size of Header Message Data field - contains the size of that Shared Message. - </td> - </tr> - <tr> - <td align="center"><code>2</code></td> - <td>If set, the message should not be shared. - </td> - </tr> - <tr> - <td align="center"><code>3</code></td> - <td>If set, the HDF5 decoder should fail to open this object - if it does not understand the message’s type and the file - is open with permissions allowing write access to the file. - (Normally, unknown messages can just be ignored by HDF5 - decoders) - </td> - </tr> - <tr> - <td align="center"><code>4</code></td> - <td>If set, the HDF5 decoder should set bit 5 of this - message’s flags (in other words, this bit field) - if it does not understand the message’s type - and the object is modified in any way. (Normally, - unknown messages can just be ignored by HDF5 - decoders) - </td> - </tr> - <tr> - <td align="center"><code>5</code></td> - <td>If set, this object was modified by software that did not - understand this message. - (Normally, unknown messages should just be ignored by HDF5 - decoders) (Can be used to invalidate an index or a similar - feature) - </td> - </tr> - <tr> - <td align="center"><code>6</code></td> - <td>If set, this message is shareable. - </td> - </tr> - <tr> - <td align="center"><code>7</code></td> - <td>If set, the HDF5 decoder should always fail to open this - object if it does not understand the message’s type (whether - it is open for read-only or read-write access). (Normally, - unknown messages can just be ignored by HDF5 decoders) - </td> - </tr> - </table></p> - - </td> - </tr> - - <tr> - <td><p>Header Message #n Data</p></td> - <td> - <p>The format and length of this field is determined by the - header message type and size respectively. Some header - message types do not require any data and this information - can be eliminated by setting the length of the message to - zero. The data is padded with enough zeroes to make the - size a multiple of eight. - </p> - </td> - </tr> - </table> - </div> - -<br /> -<h4><a name="V2ObjectHeaderPrefix"> -IV.A.1.b. Version 2 Data Object Header Prefix</a></h4> - - <p>Note that the “total number of messages” field has been dropped from - the data object header prefix in this version. The number of messages - in the data object header is just determined by the messages encountered - in all the object header blocks.</p> - - <p>Note also that the fields and messages in this version of data object - headers have <em>no</em> alignment or padding bytes inserted - they are - stored packed together.</p> - - <div align="center"> - <table class="format"> - <caption> - Version 2 Object Header - </caption> - - <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> - </tr> - - <tr> - <td colspan="4">Signature</td> - </tr> - <tr> - <td>Version</td> - <td>Flags</td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> - - <tr> - <td colspan="4">Access time <em>(optional)</em></td> - </tr> - - <tr> - <td colspan="4">Modification Time <em>(optional)</em></td> - </tr> - - <tr> - <td colspan="4">Change Time <em>(optional)</em></td> - </tr> - - <tr> - <td colspan="4">Birth Time <em>(optional)</em></td> - </tr> - - <tr> - <td colspan="2">Maximum # of compact attributes <em>(optional)</em></td> - <td colspan="2">Minimum # of dense attributes <em>(optional)</em></td> - </tr> - - <tr> - <td>Size of Chunk #0 <em>(variable size)</em></td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> - - <tr> - <td>Header Message Type #1</td> - <td colspan="2">Size of Header Message Data #1</td> - <td>Header Message #1 Flags</td> - </tr> - - <tr> - <td colspan="2">Header Message #1 Creation Order <em>(optional)</em></td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> - - <tr> - <td colspan="4"><br />Header Message Data #1<br /><br /></td> - </tr> - - <tr> - <td colspan="4">.<br />.<br />.<br /></td> - </tr> - - <tr> - <td>Header Message Type #n</td> - <td colspan="2">Size of Header Message Data #n</td> - <td>Header Message #n Flags</td> - </tr> - - <tr> - <td colspan="2">Header Message #n Creation Order <em>(optional)</em></td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> - - <tr> - <td colspan="4"><br />Header Message Data #n<br /><br /></td> - </tr> - - <tr> - <td colspan="4">Gap <em>(optional, variable size)</em></td> - </tr> - - <tr> - <td colspan="4">Checksum</td> - </tr> - </table> - </div> +<br /> +<h3> + <a name="ObjectHeader"> IV.A. Disk Format: Level 2A - Data Object + Headers</a> +</h3> + +<p>The header information of an object is designed to encompass all + of the information about an object, except for the data itself. This + information includes the dataspace, the datatype, information about how + the data is stored on disk (in external files, compressed, broken up in + blocks, and so on), as well as other information used by the library to + speed up access to the data objects or maintain a file’s + integrity. Information stored by user applications as attributes is + also stored in the object’s header. The header of each object is + not necessarily located immediately prior to the object’s data in + the file and in fact may be located in any position in the file. The + order of the messages in an object header is not significant.</p> + +<p>Object headers are composed of a prefix and a set of messages. + The prefix contains the information needed to interpret the messages + and a small amount of metadata about the object, and the messages + contain the majority of the metadata about the object.</p> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Signature</p></td> - <td> - <p>The ASCII character string “<code>OHDR</code>” - is used to indicate the - beginning of an object header. This gives file consistency - checking utilities a better chance of reconstructing a - damaged file. - </p> - </td> - </tr> - - <tr> - <td><p>Version</p></td> - <td> - <p>This field has a value of 2 indicating version 2 of the object header. - </p> - </td> - </tr> - - <tr> - <td><p>Flags</p></td> - <td> - <p>This field is a bit field indicating additional information - about the object header. - <table class="list"> - <tr> - <th width="20%" align="center">Bit(s)</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0-1</code></td> - <td>This two bit field determines the size of the - <em>Size of Chunk #0</em> field. The values are: - <table class="list"> - <tr> - <th width="20%" align="center">Value</th> - <th width="80%" align="left">Description</th> - </tr> +<br /> +<h3> + <a name="ObjectHeaderPrefix"> IV.A.1. Disk Format: Level 2A1 - Data + Object Header Prefix</a> +</h3> - <tr> - <td align="center"><code>0</code></td> - <td>The <em>Size of Chunk #0</em> field is 1 byte. - </td> - </tr> - <tr> - <td align="center"><code>1</code></td> - <td>The <em>Size of Chunk #0</em> field is 2 bytes. - </td> - </tr> - <tr> - <td align="center"><code>2</code></td> - <td>The <em>Size of Chunk #0</em> field is 4 bytes. - </td> - </tr> - <tr> - <td align="center"><code>3</code></td> - <td>The <em>Size of Chunk #0</em> field is 8 bytes. - </td> - </tr> - </table></p> - </td> - </tr> - <tr> - <td align="center"><code>2</code></td> - <td>If set, attribute creation order is tracked.</td> - </tr> - <tr> - <td align="center"><code>3</code></td> - <td>If set, attribute creation order is indexed.</td> - </tr> - <tr> - <td align="center"><code>4</code></td> - <td>If set, non-default attribute storage phase change - values are stored.</td> - </tr> - <tr> - <td align="center"><code>5</code></td> - <td>If set, access, modification, change and birth times - are stored.</td> - </tr> - <tr> - <td align="center"><code>6-7</code></td> - <td>Reserved</td> - </tr> - </table></p> - - </td> - </tr> - - <tr> - <td><p>Access Time</p></td> - <td> - <p>This 32-bit value represents the number of seconds after the - UNIX epoch when the object’s raw data was last accessed - (in other words, read or written). - </p> - <p>This field is present if bit 5 of <em>flags</em> is set. - </p> - </td> - </tr> - - <tr> - <td><p>Modification Time</p></td> - <td> - <p>This 32-bit value represents the number of seconds after - the UNIX epoch when the object’s raw data was last - modified (in other words, written). - </p> - <p>This field is present if bit 5 of <em>flags</em> is set. - </p> - </td> - </tr> - - <tr> - <td><p>Change Time</p></td> - <td> - <p>This 32-bit value represents the number of seconds after the - UNIX epoch when the object’s metadata was last changed. - </p> - <p>This field is present if bit 5 of <em>flags</em> is set. - </p> - </td> - </tr> - - <tr> - <td><p>Birth Time</p></td> - <td> - <p>This 32-bit value represents the number of seconds after the - UNIX epoch when the object was created. - </p> - <p>This field is present if bit 5 of <em>flags</em> is set. - </p> - </td> - </tr> - - <tr> - <td><p>Maximum # of compact attributes</p></td> - <td> - <p>This is the maximum number of attributes to store in the compact - format before switching to the indexed format. - </p> - <p>This field is present if bit 4 of <em>flags</em> is set. - </p> - </td> - </tr> - - <tr> - <td><p>Minimum # of dense attributes</p></td> - <td> - <p>This is the minimum number of attributes to store in the indexed - format before switching to the compact format. - </p> - <p>This field is present if bit 4 of <em>flags</em> is set. - </p> - </td> - </tr> - - <tr> - <td><p>Size of Chunk #0</p></td> - <td> - <p> - This unsigned value specifies the number of bytes of header - message data following this field that contain object header - information. - </p> - <p> - This value does not include the size of object header - continuation blocks for this object elsewhere in the file. - </p> - <p> - The length of this field varies depending on bits 0 and 1 of - the <em>flags</em> field. - </p> - </td> - </tr> - - <tr> - <td><p>Header Message #n Type</p></td> - <td> - <p>Same format as version 1 of the object header, described above. - </p> - </td> - </tr> - - <tr> - <td><p>Size of Header Message #n Data</p></td> - <td> - <p>This value specifies the number of bytes of header - message data following the header message type and length - information for the current message. The size of messages - in this version does <em>not</em> include any padding bytes. - </p> - </td> - </tr> - - <tr> - <td><p>Header Message #n Flags</p></td> - <td> - <p>Same format as version 1 of the object header, described above. - </p> - </td> - </tr> - - <tr> - <td><p>Header Message #n Creation Order</p></td> - <td> - <p>This field stores the order that a message of a given type - was created in. - </p> - <p>This field is present if bit 2 of <em>flags</em> is set. - </p> - </td> - </tr> - - <tr> - <td><p>Header Message #n Data</p></td> - <td> - <p>Same format as version 1 of the object header, described above. - </p> - </td> - </tr> - - <tr> - <td><p>Gap</p></td> - <td> - <p>A gap in an object header chunk is inferred by the end of the - messages for the chunk before the beginning of the chunk’s - checksum. Gaps are always smaller than the size of an - object header message prefix (message type + message size + - message flags). - </p> - <p>Gaps are formed when a message (typically an attribute message) - in an earlier chunk is deleted and a message from a later - chunk that does not quite fit into the free space is moved - into the earlier chunk. - </p> - </td> - </tr> - - <tr> - <td><p>Checksum</p></td> - <td> - <p>This is the checksum for the object header chunk. - </p> - </td> +<br /> +<h4> + <a name="V1ObjectHeaderPrefix"> IV.A.1.a. Version 1 Data Object + Header Prefix</a> +</h4> + +<p>Header messages are aligned on 8-byte boundaries for version 1 + object headers.</p> + +<div align="center"> + <table class="format"> + <caption>Version 1 Object Header</caption> + + <tr> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> </tr> - </table> - </div> - - <p>The header message types and the message data associated with - them compose the critical “metadata” about each object. Some - header messages are required for each object while others are - optional. Some optional header messages may also be repeated - several times in the header itself, the requirements and number - of times allowed in the header will be noted in each header - message description below. - </p> - - -<br /> -<h3><a name="ObjectHeaderMessages"> -IV.A.2. Disk Format: Level 2A2 - Data Object Header Messages</a></h3> - - <p>Data object header messages are small pieces of metadata that are - stored in the data object header for each object in an HDF5 file. - Data object header messages provide the metadata required to describe - an object and its contents, as well as optional pieces of metadata - that annotate the meaning or purpose of the object. - </p> - - <p>Data object header messages are either stored directly in the data - object header for the object or are shared between multiple objects - in the file. When a message is shared, a flag in the <em>Message Flags</em> - indicates that the actual <em>Message Data</em> - portion of that message is stored in another location (such as another - data object header, or a heap in the file) and the <em>Message Data</em> - field contains the information needed to locate the actual information - for the message. - </p> - - <p> - The format of shared message data is described here:</p> - - <div align="center"> - <table class="format"> - <caption> - Shared Message (Version 1) - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td>Version</td> - <td>Type</td> - <td colspan="2">Reserved (zero)</td> - </tr> - - <tr> - <td colspan="4">Reserved (zero)</td> - </tr> - - <tr> - <td colspan="4"><br />Address<sup>O</sup><br /><br /></td> - </tr> - </table> - <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> - </table> + <td>Version</td> + <td>Reserved (zero)</td> + <td colspan="2">Total Number of Header Messages</td> + </tr> - </div> + <tr> + <td colspan="4">Object Reference Count</td> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version</p></td> - <td><p>The version number is used when there are changes in the format - of a shared object message and is described here: - <table class="list"> - <tr> - <th width="20%" align="center">Version</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>Never used.</td> - </tr> - - <tr> - <td align="center"><code>1</code></td> - <td>Used by the library before version 1.6.1. - </td> - </tr> - </table></p> - </td> - </tr> - - <tr> - <td><p>Type</p></td> - <td><p>The type of shared message location: - <table class="list"> - <tr> - <th width="20%" align="center">Value</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>Message stored in another object’s header (a <em>committed</em> - message). - </td> - </tr> - </table></p> - </td> - </tr> - - <tr> - <td><p>Address</p></td> - <td><p>The address of the object header - containing the message to be shared.</p> - </td> - </tr> - </table> - </div> + <tr> + <td colspan="4">Object Header Size</td> + </tr> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Shared Message (Version 2) - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td>Version</td> - <td>Type</td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> - - <tr> - <td colspan="4"><br />Address<sup>O</sup><br /><br /></td> - </tr> - </table> + <tr> + <td colspan="2">Header Message Type #1</td> + <td colspan="2">Size of Header Message Data #1</td> + </tr> - <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> - </table> - </div> + <td>Header Message #1 Flags</td> + <td colspan="3">Reserved (zero)</td> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version</p></td> - <td><p>The version number is used when there are changes in the format - of a shared object message and is described here: - <table class="list"> - <tr> - <th width="20%" align="center">Version</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>2</code></td> - <td>Used by the library of version 1.6.1 and after. - </td> - </tr> - </table></p> - </td> - </tr> - - <tr> - <td><p>Type</p></td> - <td><p>The type of shared message location: - <table class="list"> - <tr> - <th width="20%" align="center">Value</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>Message stored in another object’s header (a <em>committed</em> - message). - </td> - </tr> - </table></p> - </td> - </tr> - - <tr> - <td><p>Address</p></td> - <td><p>The address of the object header - containing the message to be shared.</p></td> - </tr> - </table> - </div> + <tr> + <td colspan="4"><br />Header Message Data #1<br /> + <br /></td> + </tr> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Shared Message (Version 3) - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td>Version</td> - <td>Type</td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> - - <tr> - <td colspan="4">Location <em>(variable size)</em></td> - </tr> - </table> - </div> + <tr> + <td colspan="4">.<br />.<br />.<br /></td> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version</p></td> - <td><p>The version number indicates changes in the format of shared - object message and is described here: - <table class="list"> - <tr> - <th width="20%" align="center">Version</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>3</code></td> - <td>Used by the library of version 1.8 and after. In this - version, the <em>Type</em> field can indicate that - the message is stored in the fractal heap. - </td> - </tr> - </table></p> - </td> - </tr> - - <tr> - <td><p>Type</p></td> - <td><p>The type of shared message location: - <table class="list"> - <tr> - <th width="20%" align="center">Value</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>Message is not shared and is not shareable. - </td> - </tr> - - <tr> - <td align="center"><code>1</code></td> - <td>Message stored in file’s <em>shared object header message</em> - heap (a <em>shared</em> message). - </td> - </tr> - - <tr> - <td align="center"><code>2</code></td> - <td>Message stored in another object’s header (a <em>committed</em> - message). - </td> - </tr> - - <tr> - <td align="center"><code>3</code></td> - <td>Message stored is not shared, but is shareable. - </td> - </tr> - - </table></p> - </td> - </tr> - - <tr> - <td><p>Location</p></td> - <td><p>This field contains either a <em>Size of Offsets</em>-bytes - address of the object header - containing the message to be shared, or an 8-byte fractal heap ID - for the message in the file’s <em>shared object header message</em> - heap. - </p> - </td> - </tr> - </table> - </div> + <tr> + <td colspan="2">Header Message Type #n</td> + <td colspan="2">Size of Header Message Data #n</td> + </tr> + <tr> + <td>Header Message #n Flags</td> + <td colspan="3">Reserved (zero)</td> + </tr> - <p>The following is a list of currently defined header messages: - </p> + <tr> + <td colspan="4"><br />Header Message Data #n<br /> + <br /></td> + </tr> + </table> +</div> <br /> -<h4><a name="NILMessage">IV.A.2.a. The NIL Message</a></h4> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> - <!-- start msgdesc table --> - <center> + <tr> + <td><p>Version</p></td> + <td> + <p>This value is used to determine the format of the information + in the object header. When the format of the object header is + changed, the version number is incremented and can be used to + determine how the information in the object header is formatted. + This is version one (1) (there was no version zero (0)) of the + object header.</p> + </td> + </tr> + + <tr> + <td><p>Total Number of Header Messages</p></td> + <td> + <p>This value determines the total number of messages listed in + object headers for this object. This value includes the messages in + continuation messages for this object.</p> + </td> + </tr> + + <tr> + <td><p>Object Reference Count</p></td> + <td> + <p>This value specifies the number of “hard links” + to this object within the current file. References to the object + from external files, “soft links” in this file and + object references in this file are not tracked.</p> + </td> + </tr> + + <tr> + <td><p>Object Header Size</p></td> + <td> + <p>This value specifies the number of bytes of header message + data following this length field that contain object header + messages for this object header. This value does not include the + size of object header continuation blocks for this object elsewhere + in the file.</p> + </td> + </tr> + + <tr> + <td><p>Header Message #n Type</p></td> + <td> + <p>This value specifies the type of information included in the + following header message data. The message types for header + messages are defined in sections below.</p> + </td> + </tr> + + <tr> + <td><p>Size of Header Message #n Data</p></td> + <td> + <p>This value specifies the number of bytes of header message + data following the header message type and length information for + the current message. The size includes padding bytes to make the + message a multiple of eight bytes.</p> + </td> + </tr> + + <tr> + <td><p>Header Message #n Flags</p></td> + <td> + <p>This is a bit field with the following definition:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Bit</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>If set, the message data is constant. This is used for + messages like the datatype message of a dataset.</td> + </tr> + <tr> + <td align="center"><code>1</code></td> + <td>If set, the message is <em>shared</em> and stored in + another location than the object header. The Header Message Data + field contains a Shared Message (described in the <a + href="#ObjectHeaderMessages">Data Object Header Messages</a> + section below) and the Size of Header Message Data field contains + the size of that Shared Message. + </td> + </tr> + <tr> + <td align="center"><code>2</code></td> + <td>If set, the message should not be shared.</td> + </tr> + <tr> + <td align="center"><code>3</code></td> + <td>If set, the HDF5 decoder should fail to open this object + if it does not understand the message’s type and the file + is open with permissions allowing write access to the file. + (Normally, unknown messages can just be ignored by HDF5 decoders) + </td> + </tr> + <tr> + <td align="center"><code>4</code></td> + <td>If set, the HDF5 decoder should set bit 5 of this + message’s flags (in other words, this bit field) if it does + not understand the message’s type and the object is + modified in any way. (Normally, unknown messages can just be + ignored by HDF5 decoders)</td> + </tr> + <tr> + <td align="center"><code>5</code></td> + <td>If set, this object was modified by software that did not + understand this message. (Normally, unknown messages should just + be ignored by HDF5 decoders) (Can be used to invalidate an index + or a similar feature)</td> + </tr> + <tr> + <td align="center"><code>6</code></td> + <td>If set, this message is shareable.</td> + </tr> + <tr> + <td align="center"><code>7</code></td> + <td>If set, the HDF5 decoder should always fail to open this + object if it does not understand the message’s type + (whether it is open for read-only or read-write access). + (Normally, unknown messages can just be ignored by HDF5 decoders) + </td> + </tr> + </table> + <p></p> + + </td> + </tr> + + <tr> + <td><p>Header Message #n Data</p></td> + <td> + <p>The format and length of this field is determined by the + header message type and size respectively. Some header message + types do not require any data and this information can be + eliminated by setting the length of the message to zero. The data + is padded with enough zeroes to make the size a multiple of eight. + </p> + </td> + </tr> + </table> +</div> + +<br /> +<h4> + <a name="V2ObjectHeaderPrefix"> IV.A.1.b. Version 2 Data Object + Header Prefix</a> +</h4> + +<p>Note that the “total number of messages” field has + been dropped from the data object header prefix in this version. The + number of messages in the data object header is just determined by the + messages encountered in all the object header blocks.</p> + +<p> + Note also that the fields and messages in this version of data object + headers have <em>no</em> alignment or padding bytes inserted - they are + stored packed together. +</p> + +<div align="center"> + <table class="format"> + <caption>Version 2 Object Header</caption> + + <tr> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + </tr> + + <tr> + <td colspan="4">Signature</td> + </tr> + <tr> + <td>Version</td> + <td>Flags</td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + + <tr> + <td colspan="4">Access time <em>(optional)</em></td> + </tr> + + <tr> + <td colspan="4">Modification Time <em>(optional)</em></td> + </tr> + + <tr> + <td colspan="4">Change Time <em>(optional)</em></td> + </tr> + + <tr> + <td colspan="4">Birth Time <em>(optional)</em></td> + </tr> + + <tr> + <td colspan="2">Maximum # of compact attributes <em>(optional)</em></td> + <td colspan="2">Minimum # of dense attributes <em>(optional)</em></td> + </tr> + + <tr> + <td>Size of Chunk #0 <em>(variable size)</em></td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + + <tr> + <td>Header Message Type #1</td> + <td colspan="2">Size of Header Message Data #1</td> + <td>Header Message #1 Flags</td> + </tr> + + <tr> + <td colspan="2">Header Message #1 Creation Order <em>(optional)</em></td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + + <tr> + <td colspan="4"><br />Header Message Data #1<br /> + <br /></td> + </tr> + + <tr> + <td colspan="4">.<br />.<br />.<br /></td> + </tr> + + <tr> + <td>Header Message Type #n</td> + <td colspan="2">Size of Header Message Data #n</td> + <td>Header Message #n Flags</td> + </tr> + + <tr> + <td colspan="2">Header Message #n Creation Order <em>(optional)</em></td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + + <tr> + <td colspan="4"><br />Header Message Data #n<br /> + <br /></td> + </tr> + + <tr> + <td colspan="4">Gap <em>(optional, variable size)</em></td> + </tr> + + <tr> + <td colspan="4">Checksum</td> + </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Signature</p></td> + <td> + <p> + The ASCII character string “ + <code>OHDR</code> + ” is used to indicate the beginning of an object header. This + gives file consistency checking utilities a better chance of + reconstructing a damaged file. + </p> + </td> + </tr> + + <tr> + <td><p>Version</p></td> + <td> + <p>This field has a value of 2 indicating version 2 of the + object header.</p> + </td> + </tr> + + <tr> + <td><p>Flags</p></td> + <td> + <p>This field is a bit field indicating additional information + about the object header.</p> + <table class="list"> + <tr> + <th width="20%" align="center">Bit(s)</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0-1</code></td> + <td>This two bit field determines the size of the <em>Size + of Chunk #0</em> field. The values are: + <table class="list"> + <tr> + <th width="20%" align="center">Value</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>The <em>Size of Chunk #0</em> field is 1 byte. + </td> + </tr> + <tr> + <td align="center"><code>1</code></td> + <td>The <em>Size of Chunk #0</em> field is 2 bytes. + </td> + </tr> + <tr> + <td align="center"><code>2</code></td> + <td>The <em>Size of Chunk #0</em> field is 4 bytes. + </td> + </tr> + <tr> + <td align="center"><code>3</code></td> + <td>The <em>Size of Chunk #0</em> field is 8 bytes. + </td> + </tr> + </table> + <p></p> + </td> + </tr> + <tr> + <td align="center"><code>2</code></td> + <td>If set, attribute creation order is tracked.</td> + </tr> + <tr> + <td align="center"><code>3</code></td> + <td>If set, attribute creation order is indexed.</td> + </tr> + <tr> + <td align="center"><code>4</code></td> + <td>If set, non-default attribute storage phase change values + are stored.</td> + </tr> + <tr> + <td align="center"><code>5</code></td> + <td>If set, access, modification, change and birth times are + stored.</td> + </tr> + <tr> + <td align="center"><code>6-7</code></td> + <td>Reserved</td> + </tr> + </table> + <p></p> + + </td> + </tr> + + <tr> + <td><p>Access Time</p></td> + <td> + <p>This 32-bit value represents the number of seconds after the + UNIX epoch when the object’s raw data was last accessed (in + other words, read or written).</p> + <p> + This field is present if bit 5 of <em>flags</em> is set. + </p> + </td> + </tr> + + <tr> + <td><p>Modification Time</p></td> + <td> + <p>This 32-bit value represents the number of seconds after the + UNIX epoch when the object’s raw data was last modified (in + other words, written).</p> + <p> + This field is present if bit 5 of <em>flags</em> is set. + </p> + </td> + </tr> + + <tr> + <td><p>Change Time</p></td> + <td> + <p>This 32-bit value represents the number of seconds after the + UNIX epoch when the object’s metadata was last changed.</p> + <p> + This field is present if bit 5 of <em>flags</em> is set. + </p> + </td> + </tr> + + <tr> + <td><p>Birth Time</p></td> + <td> + <p>This 32-bit value represents the number of seconds after the + UNIX epoch when the object was created.</p> + <p> + This field is present if bit 5 of <em>flags</em> is set. + </p> + </td> + </tr> + + <tr> + <td><p>Maximum # of compact attributes</p></td> + <td> + <p>This is the maximum number of attributes to store in the + compact format before switching to the indexed format.</p> + <p> + This field is present if bit 4 of <em>flags</em> is set. + </p> + </td> + </tr> + + <tr> + <td><p>Minimum # of dense attributes</p></td> + <td> + <p>This is the minimum number of attributes to store in the + indexed format before switching to the compact format.</p> + <p> + This field is present if bit 4 of <em>flags</em> is set. + </p> + </td> + </tr> + + <tr> + <td><p>Size of Chunk #0</p></td> + <td> + <p>This unsigned value specifies the number of bytes of header + message data following this field that contain object header + information.</p> + <p>This value does not include the size of object header + continuation blocks for this object elsewhere in the file.</p> + <p> + The length of this field varies depending on bits 0 and 1 of the <em>flags</em> + field. + </p> + </td> + </tr> + + <tr> + <td><p>Header Message #n Type</p></td> + <td> + <p>Same format as version 1 of the object header, described + above.</p> + </td> + </tr> + + <tr> + <td><p>Size of Header Message #n Data</p></td> + <td> + <p> + This value specifies the number of bytes of header message data + following the header message type and length information for the + current message. The size of messages in this version does <em>not</em> + include any padding bytes. + </p> + </td> + </tr> + + <tr> + <td><p>Header Message #n Flags</p></td> + <td> + <p>Same format as version 1 of the object header, described + above.</p> + </td> + </tr> + + <tr> + <td><p>Header Message #n Creation Order</p></td> + <td> + <p>This field stores the order that a message of a given type + was created in.</p> + <p> + This field is present if bit 2 of <em>flags</em> is set. + </p> + </td> + </tr> + + <tr> + <td><p>Header Message #n Data</p></td> + <td> + <p>Same format as version 1 of the object header, described + above.</p> + </td> + </tr> + + <tr> + <td><p>Gap</p></td> + <td> + <p>A gap in an object header chunk is inferred by the end of the + messages for the chunk before the beginning of the chunk’s + checksum. Gaps are always smaller than the size of an object header + message prefix (message type + message size + message flags).</p> + <p>Gaps are formed when a message (typically an attribute + message) in an earlier chunk is deleted and a message from a later + chunk that does not quite fit into the free space is moved into the + earlier chunk.</p> + </td> + </tr> + + <tr> + <td><p>Checksum</p></td> + <td> + <p>This is the checksum for the object header chunk.</p> + </td> + </tr> + </table> +</div> + +<p>The header message types and the message data associated with + them compose the critical “metadata” about each object. + Some header messages are required for each object while others are + optional. Some optional header messages may also be repeated several + times in the header itself, the requirements and number of times + allowed in the header will be noted in each header message description + below.</p> + + +<br /> +<h3> + <a name="ObjectHeaderMessages"> IV.A.2. Disk Format: Level 2A2 - + Data Object Header Messages</a> +</h3> + +<p>Data object header messages are small pieces of metadata that are + stored in the data object header for each object in an HDF5 file. Data + object header messages provide the metadata required to describe an + object and its contents, as well as optional pieces of metadata that + annotate the meaning or purpose of the object.</p> + +<p> + Data object header messages are either stored directly in the data + object header for the object or are shared between multiple objects in + the file. When a message is shared, a flag in the <em>Message + Flags</em> indicates that the actual <em>Message Data</em> portion of that + message is stored in another location (such as another data object + header, or a heap in the file) and the <em>Message Data</em> field + contains the information needed to locate the actual information for + the message. +</p> + +<p>The format of shared message data is described here:</p> + +<div align="center"> + <table class="format"> + <caption>Shared Message (Version 1)</caption> + + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr> + <td>Version</td> + <td>Type</td> + <td colspan="2">Reserved (zero)</td> + </tr> + + <tr> + <td colspan="4">Reserved (zero)</td> + </tr> + + <tr> + <td colspan="4"><br />Address<sup>O</sup><br /> + <br /></td> + </tr> + </table> + + <table class="note"> + <tr> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> + </table> + +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Version</p></td> + <td><p>The version number is used when there are changes in + the format of a shared object message and is described here:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Version</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>Never used.</td> + </tr> + + <tr> + <td align="center"><code>1</code></td> + <td>Used by the library before version 1.6.1.</td> + </tr> + </table> + <p></p></td> + </tr> + + <tr> + <td><p>Type</p></td> + <td><p>The type of shared message location:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Value</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>Message stored in another object’s header (a <em>committed</em> + message). + </td> + </tr> + </table> + <p></p></td> + </tr> + + <tr> + <td><p>Address</p></td> + <td><p>The address of the object header containing the + message to be shared.</p></td> + </tr> + </table> +</div> + +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Shared Message (Version 2)</caption> + + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr> + <td>Version</td> + <td>Type</td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + + <tr> + <td colspan="4"><br />Address<sup>O</sup><br /> + <br /></td> + </tr> + </table> + + <table class="note"> + <tr> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Version</p></td> + <td><p>The version number is used when there are changes in + the format of a shared object message and is described here:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Version</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>2</code></td> + <td>Used by the library of version 1.6.1 and after.</td> + </tr> + </table> + <p></p></td> + </tr> + + <tr> + <td><p>Type</p></td> + <td><p>The type of shared message location:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Value</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>Message stored in another object’s header (a <em>committed</em> + message). + </td> + </tr> + </table> + <p></p></td> + </tr> + + <tr> + <td><p>Address</p></td> + <td><p>The address of the object header containing the + message to be shared.</p></td> + </tr> + </table> +</div> + +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Shared Message (Version 3)</caption> + + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr> + <td>Version</td> + <td>Type</td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + + <tr> + <td colspan="4">Location <em>(variable size)</em></td> + </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Version</p></td> + <td><p>The version number indicates changes in the format of + shared object message and is described here:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Version</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>3</code></td> + <td>Used by the library of version 1.8 and after. In this + version, the <em>Type</em> field can indicate that the message is + stored in the fractal heap. + </td> + </tr> + </table> + <p></p></td> + </tr> + + <tr> + <td><p>Type</p></td> + <td><p>The type of shared message location:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Value</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>Message is not shared and is not shareable.</td> + </tr> + + <tr> + <td align="center"><code>1</code></td> + <td>Message stored in file’s <em>shared object + header message</em> heap (a <em>shared</em> message). + </td> + </tr> + + <tr> + <td align="center"><code>2</code></td> + <td>Message stored in another object’s header (a <em>committed</em> + message). + </td> + </tr> + + <tr> + <td align="center"><code>3</code></td> + <td>Message stored is not shared, but is shareable.</td> + </tr> + + </table> + <p></p></td> + </tr> + + <tr> + <td><p>Location</p></td> + <td><p> + This field contains either a <em>Size of Offsets</em>-bytes address + of the object header containing the message to be shared, or an + 8-byte fractal heap ID for the message in the file’s <em>shared + object header message</em> heap. + </p></td> + </tr> + </table> +</div> + + +<p>The following is a list of currently defined header messages:</p> + +<br /> +<h4> + <a name="NILMessage">IV.A.2.a. The NIL Message</a> +</h4> + +<!-- start msgdesc table --> +<center> <table class="msgdesc"> - <tr><td colspan="2"><b>Header Message Name:</b> NIL</td></tr> - <tr><td colspan="2"><b>Header Message Type:</b> 0x0000</td></tr> - <tr><td colspan="2"><b>Length:</b> Varies</td></tr> - <tr><td colspan="2"><b>Status:</b> Optional; may be repeated.</td></tr> - <tr><td><b>Description:</b></td> - <td>The NIL message is used to indicate a message which is to be - ignored when reading the header messages for a data object. - [Possibly one which has been deleted for some reason.] - </td></tr> - <tr><td colspan="2"><b>Format of Data:</b> Unspecified</td></tr> - </table></center> - <!-- end msgdesc table --> + <tr> + <td colspan="2"><b>Header Message Name:</b> NIL</td> + </tr> + <tr> + <td colspan="2"><b>Header Message Type:</b> 0x0000</td> + </tr> + <tr> + <td colspan="2"><b>Length:</b> Varies</td> + </tr> + <tr> + <td colspan="2"><b>Status:</b> Optional; may be repeated.</td> + </tr> + <tr> + <td><b>Description:</b></td> + <td>The NIL message is used to indicate a message which is to be + ignored when reading the header messages for a data object. + [Possibly one which has been deleted for some reason.]</td> + </tr> + <tr> + <td colspan="2"><b>Format of Data:</b> Unspecified</td> + </tr> + </table> +</center> +<!-- end msgdesc table --> <br /> -<h4><a name="DataspaceMessage">IV.A.2.b. The Dataspace Message</a></h4> +<h4> + <a name="DataspaceMessage">IV.A.2.b. The Dataspace Message</a> +</h4> - <!-- start msgdesc table --> - <center> +<!-- start msgdesc table --> +<center> <table class="msgdesc"> - <tr><td colspan="2"><b>Header Message Name:</b> Dataspace</td></tr> - <tr><td colspan="2"><b>Header Message Type:</b> 0x0001</td></tr> - <tr><td colspan="2"><b>Length:</b> Varies according to the number of - dimensions, as described in the following table.</td></tr> - <tr><td colspan="2"><b>Status:</b> Required for dataset objects; - may not be repeated.</td></tr> - <tr><td><b>Description:</b></td> - <td>The dataspace message describes the number of dimensions (in - other words, “rank”) and size of each dimension that - the data object has. This message is only used for datasets which - have a simple, rectilinear, array-like layout; datasets requiring - a more complex layout are not yet supported. - </td> - </tr> + <tr> + <td colspan="2"><b>Header Message Name:</b> Dataspace</td> + </tr> + <tr> + <td colspan="2"><b>Header Message Type:</b> 0x0001</td> + </tr> + <tr> + <td colspan="2"><b>Length:</b> Varies according to the number of + dimensions, as described in the following table.</td> + </tr> + <tr> + <td colspan="2"><b>Status:</b> Required for dataset objects; may + not be repeated.</td> + </tr> + <tr> + <td><b>Description:</b></td> + <td>The dataspace message describes the number of dimensions (in + other words, “rank”) and size of each dimension that the + data object has. This message is only used for datasets which have a + simple, rectilinear, array-like layout; datasets requiring a more + complex layout are not yet supported.</td> + </tr> - <tr><td colspan="2"><b>Format of Data:</b> See the tables - below.</td></tr> - </table></center> - <!-- end msgdesc table --> - - <div align="center"> - <table class="format"> - <caption> - Dataspace Message - Version 1 - </caption> - - <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> - </tr> - - <tr> - <td>Version</td> - <td>Dimensionality</td> - <td>Flags</td> - <td>Reserved</td> - </tr> - - <tr> - <td colspan="4">Reserved</td> - </tr> - - <tr> - <td colspan="4"><br />Dimension #1 Size<sup>L</sup><br /><br /></td> - </tr> - <tr> - <td colspan="4">.<br />.<br />.<br /></td> - </tr> - <tr> - <td colspan="4"><br />Dimension #n Size<sup>L</sup><br /><br /></td> - </tr> - <tr> - <td colspan="4"><br />Dimension #1 Maximum Size<sup>L</sup> <em>(optional)</em><br /><br /></td> - </tr> - <tr> - <td colspan="4">.<br />.<br />.<br /></td> - </tr> - <tr> - <td colspan="4"><br />Dimension #n Maximum Size<sup>L</sup> <em>(optional)</em><br /><br /></td> - </tr> - <tr> - <td colspan="4"><br />Permutation Index #1<sup>L</sup> <em>(optional)</em><br /><br /></td> - </tr> - <tr> - <td colspan="4">.<br />.<br />.<br /></td> - </tr> - <tr> - <td colspan="4"><br />Permutation Index #n<sup>L</sup> <em>(optional)</em><br /><br /></td> - </tr> - </table> + <tr> + <td colspan="2"><b>Format of Data:</b> See the tables below.</td> + </tr> + </table> +</center> +<!-- end msgdesc table --> + +<div align="center"> + <table class="format"> + <caption>Dataspace Message - Version 1</caption> - <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘L’ in the above table are of the size - specified in “Size of Lengths” field in the superblock.) - </td></tr> - </table> - </div> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version</p></td> - <td> - <p>This value is used to determine the format of the - Dataspace Message. When the format of the - information in the message is changed, the version number - is incremented and can be used to determine how the - information in the object header is formatted. This - document describes version one (1) (there was no version - zero (0)). - </p> - </td> - </tr> - - <tr> - <td><p>Dimensionality</p></td> - <td> - <p>This value is the number of dimensions that the data - object has. - </p> - </td> - </tr> - - <tr> - <td><p>Flags</p></td> - <td> - <p>This field is used to store flags to indicate the - presence of parts of this message. Bit 0 (the least - significant bit) is used to indicate that maximum - dimensions are present. Bit 1 is used to indicate that - permutation indices are present. - </p> - </td> - </tr> - - <tr> - <td><p>Dimension #n Size</p></td> - <td> - <p>This value is the current size of the dimension of the - data as stored in the file. The first dimension stored in - the list of dimensions is the slowest changing dimension - and the last dimension stored is the fastest changing - dimension. - </p> - </td> - </tr> - - <tr> - <td><p>Dimension #n Maximum Size</p></td> - <td> - <p>This value is the maximum size of the dimension of the - data as stored in the file. This value may be the special - “<a href="#UnlimitedDim">unlimited</a>” size which indicates - that the data may expand along this dimension indefinitely. - If these values are not stored, the maximum size of each - dimension is assumed to be the dimension’s current size. - </p> - </td> - </tr> - - <tr> - <td><p>Permutation Index #n</p></td> - <td> - <p>This value is the index permutation used to map - each dimension from the canonical representation to an - alternate axis for each dimension. If these values are - not stored, the first dimension stored in the list of - dimensions is the slowest changing dimension and the last - dimension stored is the fastest changing dimension. - </p> - </td> - </tr> - </table> - </div> + <tr> + <td>Version</td> + <td>Dimensionality</td> + <td>Flags</td> + <td>Reserved</td> + </tr> + + <tr> + <td colspan="4">Reserved</td> + </tr> + + <tr> + <td colspan="4"><br />Dimension #1 Size<sup>L</sup><br /> + <br /></td> + </tr> + <tr> + <td colspan="4">.<br />.<br />.<br /></td> + </tr> + <tr> + <td colspan="4"><br />Dimension #n Size<sup>L</sup><br /> + <br /></td> + </tr> + <tr> + <td colspan="4"><br />Dimension #1 Maximum Size<sup>L</sup> <em>(optional)</em><br /> + <br /></td> + </tr> + <tr> + <td colspan="4">.<br />.<br />.<br /></td> + </tr> + <tr> + <td colspan="4"><br />Dimension #n Maximum Size<sup>L</sup> <em>(optional)</em><br /> + <br /></td> + </tr> + <tr> + <td colspan="4"><br />Permutation Index #1<sup>L</sup> <em>(optional)</em><br /> + <br /></td> + </tr> + <tr> + <td colspan="4">.<br />.<br />.<br /></td> + </tr> + <tr> + <td colspan="4"><br />Permutation Index #n<sup>L</sup> <em>(optional)</em><br /> + <br /></td> + </tr> + </table> + <table class="note"> + <tr> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘L’ in the + above table are of the size specified in “Size of + Lengths” field in the superblock.)</td> + </tr> + </table> +</div> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> - <br /> - <p>Version 2 of the dataspace message dropped the optional + <tr> + <td><p>Version</p></td> + <td> + <p>This value is used to determine the format of the Dataspace + Message. When the format of the information in the message is + changed, the version number is incremented and can be used to + determine how the information in the object header is formatted. + This document describes version one (1) (there was no version zero + (0)).</p> + </td> + </tr> + + <tr> + <td><p>Dimensionality</p></td> + <td> + <p>This value is the number of dimensions that the data object + has.</p> + </td> + </tr> + + <tr> + <td><p>Flags</p></td> + <td> + <p>This field is used to store flags to indicate the presence of + parts of this message. Bit 0 (the least significant bit) is used to + indicate that maximum dimensions are present. Bit 1 is used to + indicate that permutation indices are present.</p> + </td> + </tr> + + <tr> + <td><p>Dimension #n Size</p></td> + <td> + <p>This value is the current size of the dimension of the data + as stored in the file. The first dimension stored in the list of + dimensions is the slowest changing dimension and the last dimension + stored is the fastest changing dimension.</p> + </td> + </tr> + + <tr> + <td><p>Dimension #n Maximum Size</p></td> + <td> + <p> + This value is the maximum size of the dimension of the data as + stored in the file. This value may be the special “<a + href="#UnlimitedDim">unlimited</a>” size which indicates + that the data may expand along this dimension indefinitely. If + these values are not stored, the maximum size of each dimension is + assumed to be the dimension’s current size. + </p> + </td> + </tr> + + <tr> + <td><p>Permutation Index #n</p></td> + <td> + <p>This value is the index permutation used to map each + dimension from the canonical representation to an alternate axis + for each dimension. If these values are not stored, the first + dimension stored in the list of dimensions is the slowest changing + dimension and the last dimension stored is the fastest changing + dimension.</p> + </td> + </tr> + </table> +</div> + + + +<br /> +<p>Version 2 of the dataspace message dropped the optional permutation index value support, as it was never implemented in the HDF5 Library:</p> - <div align="center"> - <table class="format"> - <caption> - Dataspace Message - Version 2 - </caption> - - <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> - </tr> - - <tr> - <td>Version</td> - <td>Dimensionality</td> - <td>Flags</td> - <td>Type</td> - </tr> - - <tr> - <td colspan="4"><br />Dimension #1 Size<sup>L</sup><br /><br /></td> - </tr> - <tr> - <td colspan="4">.<br />.<br />.<br /></td> - </tr> - <tr> - <td colspan="4"><br />Dimension #n Size<sup>L</sup><br /><br /></td> - </tr> - <tr> - <td colspan="4"><br />Dimension #1 Maximum Size<sup>L</sup> <em>(optional)</em><br /><br /></td> - </tr> - <tr> - <td colspan="4">.<br />.<br />.<br /></td> - </tr> - <tr> - <td colspan="4"><br />Dimension #n Maximum Size<sup>L</sup> <em>(optional)</em><br /><br /></td> - </tr> - </table> +<div align="center"> + <table class="format"> + <caption>Dataspace Message - Version 2</caption> - <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘L’ in the above table are of the size - specified in “Size of Lengths” field in the superblock.) - </td></tr> - </table> - </div> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version</p></td> - <td> - <p>This value is used to determine the format of the - Dataspace Message. This field should be ‘2’ for version 2 - format messages. - </p> - </td> - </tr> - - <tr> - <td><p>Dimensionality</p></td> - <td> - <p>This value is the number of dimensions that the data object has. - </p> - </td> - </tr> - - <tr> - <td><p>Flags</p></td> - <td> - <p>This field is used to store flags to indicate the - presence of parts of this message. Bit 0 (the least - significant bit) is used to indicate that maximum - dimensions are present. - </p> - </td> - </tr> - - <tr> - <td><p>Type</p></td> - <td> - <p>This field indicates the type of the dataspace: - <table class="list"> - <tr> - <th width="20%" align="center">Value</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>A <em>scalar</em> dataspace; in other words, - a dataspace with a single, dimensionless element. - </td> - </tr> - <tr> - <td align="center"><code>1</code></td> - <td>A <em>simple</em> dataspace; in other words, - a dataspace with a rank > 0 and an appropriate # of - dimensions. - </td> - </tr> - <tr> - <td align="center"><code>2</code></td> - <td>A <em>null</em> dataspace; in other words, - a dataspace with no elements. - </td> - </tr> - </table></p> - </td> - </tr> - - <tr> - <td><p>Dimension #n Size</p></td> - <td> - <p>This value is the current size of the dimension of the - data as stored in the file. The first dimension stored in - the list of dimensions is the slowest changing dimension - and the last dimension stored is the fastest changing - dimension. - </p> - </td> - </tr> - - <tr> - <td><p>Dimension #n Maximum Size</p></td> - <td> - <p>This value is the maximum size of the dimension of the - data as stored in the file. This value may be the special - “<a href="#UnlimitedDim">unlimited</a>” size which indicates - that the data may expand along this dimension indefinitely. - If these values are not stored, the maximum size of each - dimension is assumed to be the dimension’s current size. - </p> - </td> - </tr> + <tr> + <td>Version</td> + <td>Dimensionality</td> + <td>Flags</td> + <td>Type</td> + </tr> - </table> - </div> + <tr> + <td colspan="4"><br />Dimension #1 Size<sup>L</sup><br /> + <br /></td> + </tr> + <tr> + <td colspan="4">.<br />.<br />.<br /></td> + </tr> + <tr> + <td colspan="4"><br />Dimension #n Size<sup>L</sup><br /> + <br /></td> + </tr> + <tr> + <td colspan="4"><br />Dimension #1 Maximum Size<sup>L</sup> <em>(optional)</em><br /> + <br /></td> + </tr> + <tr> + <td colspan="4">.<br />.<br />.<br /></td> + </tr> + <tr> + <td colspan="4"><br />Dimension #n Maximum Size<sup>L</sup> <em>(optional)</em><br /> + <br /></td> + </tr> + </table> + + <table class="note"> + <tr> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘L’ in the + above table are of the size specified in “Size of + Lengths” field in the superblock.)</td> + </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Version</p></td> + <td> + <p>This value is used to determine the format of the Dataspace + Message. This field should be ‘2’ for version 2 format + messages.</p> + </td> + </tr> + + <tr> + <td><p>Dimensionality</p></td> + <td> + <p>This value is the number of dimensions that the data object + has.</p> + </td> + </tr> + + <tr> + <td><p>Flags</p></td> + <td> + <p>This field is used to store flags to indicate the presence of + parts of this message. Bit 0 (the least significant bit) is used to + indicate that maximum dimensions are present.</p> + </td> + </tr> + + <tr> + <td><p>Type</p></td> + <td> + <p>This field indicates the type of the dataspace:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Value</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>A <em>scalar</em> dataspace; in other words, a dataspace + with a single, dimensionless element. + </td> + </tr> + <tr> + <td align="center"><code>1</code></td> + <td>A <em>simple</em> dataspace; in other words, a dataspace + with a rank > 0 and an appropriate # of dimensions. + </td> + </tr> + <tr> + <td align="center"><code>2</code></td> + <td>A <em>null</em> dataspace; in other words, a dataspace + with no elements. + </td> + </tr> + </table> + <p></p> + </td> + </tr> + + <tr> + <td><p>Dimension #n Size</p></td> + <td> + <p>This value is the current size of the dimension of the data + as stored in the file. The first dimension stored in the list of + dimensions is the slowest changing dimension and the last dimension + stored is the fastest changing dimension.</p> + </td> + </tr> + + <tr> + <td><p>Dimension #n Maximum Size</p></td> + <td> + <p> + This value is the maximum size of the dimension of the data as + stored in the file. This value may be the special “<a + href="#UnlimitedDim">unlimited</a>” size which indicates + that the data may expand along this dimension indefinitely. If + these values are not stored, the maximum size of each dimension is + assumed to be the dimension’s current size. + </p> + </td> + </tr> + + </table> +</div> @@ -8287,22 +8431,22 @@ IV.A.2. Disk Format: Level 2A2 - Data Object Header Messages</a></h3> <center> <table border cellpadding="4" width="80%"> - <caption align="bottom"> - <b>HDF5 Dataspace Message Layout</b> - </caption> - - <tr align="center"> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> + <caption align="bottom"> + <b>HDF5 Dataspace Message Layout</b> + </caption> + + <tr align="center"> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> </tr> - <tr align="center"> - <td colspan="4">Mesh Type</td> + <tr align="center"> + <td colspan="4">Mesh Type</td> </tr> - <tr align="center"> - <td colspan="4">Logical Dimensionality</td> + <tr align="center"> + <td colspan="4">Logical Dimensionality</td> </tr> </table> </center> @@ -8311,156 +8455,156 @@ IV.A.2. Disk Format: Level 2A2 - Data Object Header Messages</a></h3> <dl> <dt>The elements of the dimensionality message are described below: <dd> - <dl> - <dt>Mesh Type: (unsigned 32-bit integer) - <dd>This value indicates whether the grid is - polar/spherical/cartesion, - structured/unstructured and regular/irregular. <br /> - The mesh type value is broken up as follows: <br /> - - <br /> - <center> - <table border cellpadding="4" width="80%"> - <caption align="bottom"> - <b>HDF5 Mesh-type Layout</b> - </caption> - - <tr align="center"> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr align="center"> - <td colspan="1">Mesh Embedding</td> - <td colspan="1">Coordinate System</td> - <td colspan="1">Structure</td> - <td colspan="1">Regularity</td> - </tr> - </table> - </center> - The following are the definitions of mesh-type bytes: - <dl> - <dt>Mesh Embedding - <dd>This value indicates whether the dataset dataspace - is located within - another dataspace or not: - <dl> <dl> - <dt><STANDALONE> - <dd>The dataset mesh is self-contained and is not - embedded in another mesh. - <dt><EMBEDDED> - <dd>The dataset’s dataspace is located within - another dataspace, as - described in information below. - </dl> </dl> - <dt>Coordinate System - <dd>This value defines the type of coordinate system - used for the mesh: - <dl> <dl> - <dt><POLAR> - <dd>The last two dimensions are in polar - coordinates, higher dimensions are - cartesian. - <dt><SPHERICAL> - <dd>The last three dimensions are in spherical - coordinates, higher dimensions - are cartesian. - <dt><CARTESIAN> - <dd>All dimensions are in cartesian coordinates. - </dl> </dl> - <dt>Structure - <dd>This value defines the locations of the grid-points - on the axes: - <dl> <dl> - <dt><STRUCTURED> - <dd>All grid-points are on integral, sequential - locations, starting from 0. - <dt><UNSTRUCTURED> - <dd>Grid-points locations in each dimension are - explicitly defined and - may be of any numeric datatype. - </dl> </dl> - <dt>Regularity - <dd>This value defines the locations of the dataset - points on the grid: - <dl> <dl> - <dt><REGULAR> - <dd>All dataset elements are located at the - grid-points defined. - <dt><IRREGULAR> - <dd>Each dataset element has a particular - grid-location defined. - </dl> </dl> - </dl> - <p>The following grid combinations are currently allowed:</p> - <dl> <dl> - <dt><POLAR-STRUCTURED-REGULAR> - <dt><SPHERICAL-STRUCTURED-REGULAR> - <dt><CARTESIAN-STRUCTURED-REGULAR> - <dt><POLAR-UNSTRUCTURED-REGULAR> - <dt><SPHERICAL-UNSTRUCTURED-REGULAR> - <dt><CARTESIAN-UNSTRUCTURED-REGULAR> - <dt><CARTESIAN-UNSTRUCTURED-IRREGULAR> - </dl> </dl> - All of the above grid types can be embedded within another - dataspace. - <br /> <br /> - <dt>Logical Dimensionality: (unsigned 32-bit integer) - <dd>This value is the number of dimensions that the dataset occupies. - - <br /> - <center> - <table border cellpadding="4" width="80%"> - <caption align="bottom"> - <b>HDF5 Dataspace Embedded Dimensionality Information</b> - </caption> - - <tr align="center"> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr align="center"> - <td colspan="4">Embedded Dimensionality</td> - </tr> - <tr align="center"> - <td colspan="4">Embedded Dimension Size #1</td> - </tr> - <tr align="center"> - <td colspan="4">.<br />.<br />.<br /></td> - </tr> - <tr align="center"> - <td colspan="4">Embedded Dimension Size #n</td> - </tr> - <tr align="center"> - <td colspan="4">Embedded Origin Location #1</td> - </tr> - <tr align="center"> - <td colspan="4">.<br />.<br />.<br /></td> - </tr> - <tr align="center"> - <td colspan="4">Embedded Origin Location #n</td> - </tr> - </table> - </center> - - <dt>Embedded Dimensionality: (unsigned 32-bit integer) - <dd>This value is the number of dimensions of the space the - dataset is located within: in other words, a planar dataset + <dl> + <dt>Mesh Type: (unsigned 32-bit integer) + <dd>This value indicates whether the grid is + polar/spherical/cartesion, + structured/unstructured and regular/irregular. <br /> + The mesh type value is broken up as follows: <br /> + + <br /> + <center> + <table border cellpadding="4" width="80%"> + <caption align="bottom"> + <b>HDF5 Mesh-type Layout</b> + </caption> + + <tr align="center"> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr align="center"> + <td colspan="1">Mesh Embedding</td> + <td colspan="1">Coordinate System</td> + <td colspan="1">Structure</td> + <td colspan="1">Regularity</td> + </tr> + </table> + </center> + The following are the definitions of mesh-type bytes: + <dl> + <dt>Mesh Embedding + <dd>This value indicates whether the dataset dataspace + is located within + another dataspace or not: + <dl> <dl> + <dt><STANDALONE> + <dd>The dataset mesh is self-contained and is not + embedded in another mesh. + <dt><EMBEDDED> + <dd>The dataset’s dataspace is located within + another dataspace, as + described in information below. + </dl> </dl> + <dt>Coordinate System + <dd>This value defines the type of coordinate system + used for the mesh: + <dl> <dl> + <dt><POLAR> + <dd>The last two dimensions are in polar + coordinates, higher dimensions are + cartesian. + <dt><SPHERICAL> + <dd>The last three dimensions are in spherical + coordinates, higher dimensions + are cartesian. + <dt><CARTESIAN> + <dd>All dimensions are in cartesian coordinates. + </dl> </dl> + <dt>Structure + <dd>This value defines the locations of the grid-points + on the axes: + <dl> <dl> + <dt><STRUCTURED> + <dd>All grid-points are on integral, sequential + locations, starting from 0. + <dt><UNSTRUCTURED> + <dd>Grid-points locations in each dimension are + explicitly defined and + may be of any numeric datatype. + </dl> </dl> + <dt>Regularity + <dd>This value defines the locations of the dataset + points on the grid: + <dl> <dl> + <dt><REGULAR> + <dd>All dataset elements are located at the + grid-points defined. + <dt><IRREGULAR> + <dd>Each dataset element has a particular + grid-location defined. + </dl> </dl> + </dl> + <p>The following grid combinations are currently allowed:</p> + <dl> <dl> + <dt><POLAR-STRUCTURED-REGULAR> + <dt><SPHERICAL-STRUCTURED-REGULAR> + <dt><CARTESIAN-STRUCTURED-REGULAR> + <dt><POLAR-UNSTRUCTURED-REGULAR> + <dt><SPHERICAL-UNSTRUCTURED-REGULAR> + <dt><CARTESIAN-UNSTRUCTURED-REGULAR> + <dt><CARTESIAN-UNSTRUCTURED-IRREGULAR> + </dl> </dl> + All of the above grid types can be embedded within another + dataspace. + <br /> <br /> + <dt>Logical Dimensionality: (unsigned 32-bit integer) + <dd>This value is the number of dimensions that the dataset occupies. + + <br /> + <center> + <table border cellpadding="4" width="80%"> + <caption align="bottom"> + <b>HDF5 Dataspace Embedded Dimensionality Information</b> + </caption> + + <tr align="center"> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr align="center"> + <td colspan="4">Embedded Dimensionality</td> + </tr> + <tr align="center"> + <td colspan="4">Embedded Dimension Size #1</td> + </tr> + <tr align="center"> + <td colspan="4">.<br />.<br />.<br /></td> + </tr> + <tr align="center"> + <td colspan="4">Embedded Dimension Size #n</td> + </tr> + <tr align="center"> + <td colspan="4">Embedded Origin Location #1</td> + </tr> + <tr align="center"> + <td colspan="4">.<br />.<br />.<br /></td> + </tr> + <tr align="center"> + <td colspan="4">Embedded Origin Location #n</td> + </tr> + </table> + </center> + + <dt>Embedded Dimensionality: (unsigned 32-bit integer) + <dd>This value is the number of dimensions of the space the + dataset is located within: in other words, a planar dataset located within a 3-D space, a 3-D dataset - which is a subset of another 3-D space, and so on. - <dt>Embedded Dimension Size: (unsigned 32-bit integer) - <dd>These values are the sizes of the dimensions of the - embedded dataspace - that the dataset is located within. - <dt>Embedded Origin Location: (unsigned 32-bit integer) - <dd>These values comprise the location of the dataset’s - origin within the embedded dataspace. - </dl> + which is a subset of another 3-D space, and so on. + <dt>Embedded Dimension Size: (unsigned 32-bit integer) + <dd>These values are the sizes of the dimensions of the + embedded dataspace + that the dataset is located within. + <dt>Embedded Origin Location: (unsigned 32-bit integer) + <dd>These values comprise the location of the dataset’s + origin within the embedded dataspace. + </dl> </dl> [Comment: need some way to handle different orientations of the dataset dataspace @@ -8469,31 +8613,31 @@ IV.A.2. Disk Format: Level 2A2 - Data Object Header Messages</a></h3> <br /> <center> <table border cellpadding="4" width="80%"> - <caption align="bottom"> - <b>HDF5 Dataspace Structured/Regular Grid Information</b> - </caption> - - <tr align="center"> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> + <caption align="bottom"> + <b>HDF5 Dataspace Structured/Regular Grid Information</b> + </caption> + + <tr align="center"> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> </tr> - <tr align="center"> - <td colspan="4">Logical Dimension Size #1</td> + <tr align="center"> + <td colspan="4">Logical Dimension Size #1</td> </tr> - <tr align="center"> - <td colspan="4">Logical Dimension Maximum #1</td> + <tr align="center"> + <td colspan="4">Logical Dimension Maximum #1</td> </tr> - <tr align="center"> - <td colspan="4">.<br />.<br />.<br /></td> + <tr align="center"> + <td colspan="4">.<br />.<br />.<br /></td> </tr> - <tr align="center"> - <td colspan="4">Logical Dimension Size #n</td> + <tr align="center"> + <td colspan="4">Logical Dimension Size #n</td> </tr> - <tr align="center"> - <td colspan="4">Logical Dimension Maximum #n</td> + <tr align="center"> + <td colspan="4">Logical Dimension Maximum #n</td> </tr> </table> </center> @@ -8502,58 +8646,58 @@ IV.A.2. Disk Format: Level 2A2 - Data Object Header Messages</a></h3> <dl> <dt>The elements of the dimensionality message are described below: <dd> - <dl> - <dt>Logical Dimension Size #n: (unsigned 32-bit integer) - <dd>This value is the current size of the dimension of the - data as stored in - the file. The first dimension stored in the list of - dimensions is the slowest - changing dimension and the last dimension stored is the - fastest changing - dimension. - <dt>Logical Dimension Maximum #n: (unsigned 32-bit integer) - <dd>This value is the maximum size of the dimension of the - data as stored in - the file. This value may be the special value - <UNLIMITED> which - indicates that the data may expand along this dimension - indefinitely. - </dl> + <dl> + <dt>Logical Dimension Size #n: (unsigned 32-bit integer) + <dd>This value is the current size of the dimension of the + data as stored in + the file. The first dimension stored in the list of + dimensions is the slowest + changing dimension and the last dimension stored is the + fastest changing + dimension. + <dt>Logical Dimension Maximum #n: (unsigned 32-bit integer) + <dd>This value is the maximum size of the dimension of the + data as stored in + the file. This value may be the special value + <UNLIMITED> which + indicates that the data may expand along this dimension + indefinitely. + </dl> </dl> <br /> <center> <table border cellpadding="4" width="80%"> - <caption align="bottom"> - <b>HDF5 Dataspace Structured/Irregular Grid Information</b> - </caption> - - <tr align="center"> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> + <caption align="bottom"> + <b>HDF5 Dataspace Structured/Irregular Grid Information</b> + </caption> + + <tr align="center"> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> </tr> - <tr align="center"> - <td colspan="4"># of Grid Points in Dimension #1</td> + <tr align="center"> + <td colspan="4"># of Grid Points in Dimension #1</td> </tr> - <tr align="center"> - <td colspan="4">.<br />.<br />.<br /></td> + <tr align="center"> + <td colspan="4">.<br />.<br />.<br /></td> </tr> - <tr align="center"> - <td colspan="4"># of Grid Points in Dimension #n</td> + <tr align="center"> + <td colspan="4"># of Grid Points in Dimension #n</td> </tr> - <tr align="center"> - <td colspan="4">Datatype of Grid Point Locations</td> + <tr align="center"> + <td colspan="4">Datatype of Grid Point Locations</td> </tr> - <tr align="center"> - <td colspan="4">Location of Grid Points in Dimension #1</td> + <tr align="center"> + <td colspan="4">Location of Grid Points in Dimension #1</td> </tr> - <tr align="center"> - <td colspan="4">.<br />.<br />.<br /></td> + <tr align="center"> + <td colspan="4">.<br />.<br />.<br /></td> </tr> - <tr align="center"> - <td colspan="4">Location of Grid Points in Dimension #n</td> + <tr align="center"> + <td colspan="4">Location of Grid Points in Dimension #n</td> </tr> </table> </center> @@ -8561,6342 +8705,6548 @@ IV.A.2. Disk Format: Level 2A2 - Data Object Header Messages</a></h3> <br /> <center> <table border cellpadding="4" width="80%"> - <caption align="bottom"> - <b>HDF5 Dataspace Unstructured Grid Information</b> - </caption> - - <tr align="center"> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> + <caption align="bottom"> + <b>HDF5 Dataspace Unstructured Grid Information</b> + </caption> + + <tr align="center"> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> </tr> - <tr align="center"> - <td colspan="4"># of Grid Points</td> + <tr align="center"> + <td colspan="4"># of Grid Points</td> </tr> - <tr align="center"> - <td colspan="4">Datatype of Grid Point Locations</td> + <tr align="center"> + <td colspan="4">Datatype of Grid Point Locations</td> </tr> - <tr align="center"> - <td colspan="4">Grid Point Locations<br />.<br />.<br /></td> + <tr align="center"> + <td colspan="4">Grid Point Locations<br />.<br />.<br /></td> </tr> </table> </center> --> <br /> -<h4><a name="LinkInfoMessage">IV.A.2.c. The Link Info Message</a></h4> +<h4> + <a name="LinkInfoMessage">IV.A.2.c. The Link Info Message</a> +</h4> - <!-- start msgdesc table --> - <center> +<!-- start msgdesc table --> +<center> <table class="msgdesc"> - <tr><td colspan="2"><b>Header Message Name:</b> Link Info</td></tr> - <tr><td colspan="2"><b>Header Message Type:</b> 0x002 </td></tr> - <tr><td colspan="2"><b>Length:</b> Varies </td></tr> - <tr><td colspan="2"><b>Status:</b> Optional; may not be - repeated. </td></tr> - <tr><td><b>Description:</b></td> - <td>The link info message tracks variable information about the - current state of the links for a “new style” - group’s behavior. Variable information will be stored in - this message and constant information will be stored in the - <a href="#GroupInfoMessage">Group Info</a> message. - </td></tr> - <tr><td colspan="2"><b>Format of Data:</b> See the tables - below.</td></tr> - </table></center> - <!-- end msgdesc table --> - - <div align="center"> - <table class="format"> - <caption> - Link Info - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td>Version</td> - <td>Flags</td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> - - <tr> - <td colspan="4"><br />Maximum Creation Index <em>(8 bytes, optional)</em><br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Fractal Heap Address<sup>O</sup><br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Address of v2 B-tree for Name Index<sup>O</sup><br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Address of v2 B-tree for Creation Order Index<sup>O</sup> <em>(optional)</em><br /><br /></td> - </tr> + <tr> + <td colspan="2"><b>Header Message Name:</b> Link Info</td> + </tr> + <tr> + <td colspan="2"><b>Header Message Type:</b> 0x002</td> + </tr> + <tr> + <td colspan="2"><b>Length:</b> Varies</td> + </tr> + <tr> + <td colspan="2"><b>Status:</b> Optional; may not be repeated.</td> + </tr> + <tr> + <td><b>Description:</b></td> + <td>The link info message tracks variable information about the + current state of the links for a “new style” + group’s behavior. Variable information will be stored in this + message and constant information will be stored in the <a + href="#GroupInfoMessage">Group Info</a> message. + </td> + </tr> + <tr> + <td colspan="2"><b>Format of Data:</b> See the tables below.</td> + </tr> + </table> +</center> +<!-- end msgdesc table --> - </table> +<div align="center"> + <table class="format"> + <caption>Link Info</caption> - <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> - </table> - </div> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version</p></td> - <td> - <p>The version number for this message. This document describes - version 0.</p> - </td> - </tr> - - <tr> - <td><p>Flags</p></td> - <td><p>This field determines various optional aspects of the link - info message: - - <table class="list"> - <tr> - <th width="20%" align="center">Bit</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>If set, creation order for the links is tracked. - </td> - </tr> - <tr> - <td align="center"><code>1</code></td> - <td>If set, creation order for the links is indexed. - </td> - </tr> - <tr> - <td align="center"><code>2-7</code></td> - <td>Reserved</td> - </tr> - </table></p> - - </td> - </tr> - - <tr> - <td><p>Maximum Creation Index</p></td> - <td><p>This 64-bit value is the maximum creation order index value - stored for a link in this group.</p> - <p>This field is present if bit 0 of <em>flags</em> is set.</p> - </td> - </tr> - - <tr> - <td><p>Fractal Heap Address</p></td> - <td> - <p> - This is the address of the fractal heap to store dense links. - Each link stored in the fractal heap is stored as a - <a href="#LinkMessage">Link Message</a>. - </p> - <p> - If there are no links in the group, or the group’s links - are stored “compactly” (as object header messages), this - value will be the <a href="#UndefinedAddress">undefined - address</a>. - </p> - </td> - </tr> - - <tr> - <td><p>Address of v2 B-tree for Name Index</p></td> - <td><p>This is the address of the version 2 B-tree to index names of links.</p> - <p>If there are no links in the group, or the group’s links - are stored “compactly” (as object header messages), this - value will be the <a href="#UndefinedAddress">undefined - address</a>. - </p> - </td> - </tr> - - <tr> - <td><p>Address of v2 B-tree for Creation Order Index</p></td> - <td><p>This is the address of the version 2 B-tree to index creation order of links.</p> - <p>If there are no links in the group, or the group’s links - are stored “compactly” (as object header messages), this - value will be the <a href="#UndefinedAddress">undefined - address</a>. - </p> - <p>This field exists if bit 1 of <em>flags</em> is set.</p> - </td> - </tr> + <tr> + <td>Version</td> + <td>Flags</td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> - </table> - </div> + <tr> + <td colspan="4"><br />Maximum Creation Index <em>(8 bytes, + optional)</em><br /> + <br /></td> + </tr> + <tr> + <td colspan="4"><br />Fractal Heap Address<sup>O</sup><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Address of v2 B-tree for Name Index<sup>O</sup><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Address of v2 B-tree for Creation Order + Index<sup>O</sup> <em>(optional)</em><br /> + <br /></td> + </tr> + + </table> + + <table class="note"> + <tr> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> + </table> +</div> <br /> -<h4><a name="DatatypeMessage">IV.A.2.d. The Datatype Message</a></h4> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> - <!-- start msgdesc table --> - <center> - <table class="msgdesc"> - <tr><td colspan="2"><b>Header Message Name:</b> Datatype</td></tr> - <tr><td colspan="2"><b>Header Message Type:</b> 0x0003 - </td></tr> - <tr><td colspan="2"><b>Length:</b> Variable</td></tr> - <tr><td colspan="2"><b>Status:</b> Required for dataset or committed - datatype (formerly named datatype) objects; may not be repeated. - </td></tr> - <tr><td><b>Description:</b></td> - <td><p>The datatype message defines the datatype for each element - of a dataset or a common datatype for sharing between multiple - datasets. A datatype can describe an atomic type like a fixed- - or floating-point type or more complex types like a C struct - (compound datatype), array (array datatype) or C++ vector - (variable-length datatype).</p> - <p>Datatype messages that are part of a dataset object do not - describe how elements are related to one another; the dataspace - message is used for that purpose. Datatype messages that are part of - a committed datatype (formerly named datatype) message describe - a common datatype that can be shared by multiple datasets in the - file.</p> - </td></tr> - <tr><td colspan="2"><b>Format of Data:</b> See the tables - below.</td></tr> - </table></center> - <!-- end msgdesc table --> - - <div align="center"> - <table class="format"> - <caption> - Datatype Message - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td>Class and Version</td> - <td>Class Bit Field, Bits 0-7</td> - <td>Class Bit Field, Bits 8-15</td> - <td>Class Bit Field, Bits 16-23</td> - </tr> - - <tr> - <td colspan="4">Size</td> - </tr> - - <tr> - <td colspan="4"><br /><br />Properties<br /><br /><br /></td> - </tr> - </table> - </div> + <tr> + <td><p>Version</p></td> + <td> + <p>The version number for this message. This document describes + version 0.</p> + </td> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Class and Version</p></td> - <td> - <p>The version of the datatype message and the datatype’s class - information are packed together in this field. The version - number is packed in the top 4 bits of the field and the class - is contained in the bottom 4 bits. - </p> - <p>The version number information is used for changes in the - format of the datatype message and is described here: + <tr> + <td><p>Flags</p></td> + <td><p>This field determines various optional aspects of the + link info message:</p> <table class="list"> <tr> - <th width="20%" align="center">Version</th> - <th width="80%" align="left">Description</th> + <th width="20%" align="center">Bit</th> + <th width="80%" align="left">Description</th> </tr> <tr> - <td align="center"><code>0</code></td> - <td>Never used - </td> + <td align="center"><code>0</code></td> + <td>If set, creation order for the links is tracked.</td> </tr> <tr> - <td align="center"><code>1</code></td> - <td>Used by early versions of the library to encode - compound datatypes with explicit array fields. - See the compound datatype description below for - further details. - </td> + <td align="center"><code>1</code></td> + <td>If set, creation order for the links is indexed.</td> </tr> <tr> - <td align="center"><code>2</code></td> - <td>Used when an array datatype needs to be encoded. - </td> + <td align="center"><code>2-7</code></td> + <td>Reserved</td> </tr> + </table> + <p></p></td> + </tr> + + <tr> + <td><p>Maximum Creation Index</p></td> + <td><p>This 64-bit value is the maximum creation order index + value stored for a link in this group.</p> + <p> + This field is present if bit 0 of <em>flags</em> is set. + </p></td> + </tr> + + <tr> + <td><p>Fractal Heap Address</p></td> + <td> + <p> + This is the address of the fractal heap to store dense links. Each + link stored in the fractal heap is stored as a <a + href="#LinkMessage">Link Message</a>. + </p> + <p> + If there are no links in the group, or the group’s links are + stored “compactly” (as object header messages), this + value will be the <a href="#UndefinedAddress">undefined address</a>. + </p> + </td> + </tr> + + <tr> + <td><p>Address of v2 B-tree for Name Index</p></td> + <td><p>This is the address of the version 2 B-tree to index + names of links.</p> + <p> + If there are no links in the group, or the group’s links are + stored “compactly” (as object header messages), this + value will be the <a href="#UndefinedAddress">undefined address</a>. + </p></td> + </tr> + + <tr> + <td><p>Address of v2 B-tree for Creation Order Index</p></td> + <td><p>This is the address of the version 2 B-tree to index + creation order of links.</p> + <p> + If there are no links in the group, or the group’s links are + stored “compactly” (as object header messages), this + value will be the <a href="#UndefinedAddress">undefined address</a>. + </p> + <p> + This field exists if bit 1 of <em>flags</em> is set. + </p></td> + </tr> + + </table> +</div> + + +<br /> +<h4> + <a name="DatatypeMessage">IV.A.2.d. The Datatype Message</a> +</h4> + +<!-- start msgdesc table --> +<center> + <table class="msgdesc"> + <tr> + <td colspan="2"><b>Header Message Name:</b> Datatype</td> + </tr> + <tr> + <td colspan="2"><b>Header Message Type:</b> 0x0003</td> + </tr> + <tr> + <td colspan="2"><b>Length:</b> Variable</td> + </tr> + <tr> + <td colspan="2"><b>Status:</b> Required for dataset or committed + datatype (formerly named datatype) objects; may not be repeated.</td> + </tr> + <tr> + <td><b>Description:</b></td> + <td><p>The datatype message defines the datatype for each + element of a dataset or a common datatype for sharing between + multiple datasets. A datatype can describe an atomic type like a + fixed- or floating-point type or more complex types like a C struct + (compound datatype), array (array datatype) or C++ vector + (variable-length datatype).</p> + <p>Datatype messages that are part of a dataset object do not + describe how elements are related to one another; the dataspace + message is used for that purpose. Datatype messages that are part + of a committed datatype (formerly named datatype) message describe + a common datatype that can be shared by multiple datasets in the + file.</p></td> + </tr> + <tr> + <td colspan="2"><b>Format of Data:</b> See the tables below.</td> + </tr> + </table> +</center> +<!-- end msgdesc table --> + +<div align="center"> + <table class="format"> + <caption>Datatype Message</caption> + + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr> + <td>Class and Version</td> + <td>Class Bit Field, Bits 0-7</td> + <td>Class Bit Field, Bits 8-15</td> + <td>Class Bit Field, Bits 16-23</td> + </tr> + + <tr> + <td colspan="4">Size</td> + </tr> + + <tr> + <td colspan="4"><br /> + <br />Properties<br /> + <br /> + <br /></td> + </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Class and Version</p></td> + <td> + <p>The version of the datatype message and the datatype’s + class information are packed together in this field. The version + number is packed in the top 4 bits of the field and the class is + contained in the bottom 4 bits.</p> + <p>The version number information is used for changes in the + format of the datatype message and is described here:</p> + <table class="list"> <tr> - <td align="center"><code>3</code></td> - <td>Used when a VAX byte-ordered type needs to be - encoded. Packs various other datatype classes more - efficiently also. - </td> + <th width="20%" align="center">Version</th> + <th width="80%" align="left">Description</th> </tr> - </table></p> - <p>The class of the datatype determines the format for the class - bit field and properties portion of the datatype message, which - are described below. The - following classes are currently defined: + <tr> + <td align="center"><code>0</code></td> + <td>Never used</td> + </tr> + <tr> + <td align="center"><code>1</code></td> + <td>Used by early versions of the library to encode compound + datatypes with explicit array fields. See the compound datatype + description below for further details.</td> + </tr> + <tr> + <td align="center"><code>2</code></td> + <td>Used when an array datatype needs to be encoded.</td> + </tr> + <tr> + <td align="center"><code>3</code></td> + <td>Used when a VAX byte-ordered type needs to be encoded. + Packs various other datatype classes more efficiently also.</td> + </tr> + </table> + <p></p> + <p>The class of the datatype determines the format for the class + bit field and properties portion of the datatype message, which are + described below. The following classes are currently defined:</p> <table class="list"> <tr> - <th width="20%" align="center">Value</th> - <th width="80%" align="left">Description</th> + <th width="20%" align="center">Value</th> + <th width="80%" align="left">Description</th> </tr> <tr> - <td align="center"><code>0</code></td> - <td>Fixed-Point</td> + <td align="center"><code>0</code></td> + <td>Fixed-Point</td> </tr> <tr> - <td align="center"><code>1</code></td> - <td>Floating-Point</td> + <td align="center"><code>1</code></td> + <td>Floating-Point</td> </tr> <tr> - <td align="center"><code>2</code></td> - <td>Time</td> + <td align="center"><code>2</code></td> + <td>Time</td> </tr> <tr> - <td align="center"><code>3</code></td> - <td>String</td> + <td align="center"><code>3</code></td> + <td>String</td> </tr> <tr> - <td align="center"><code>4</code></td> - <td>Bit field</td> + <td align="center"><code>4</code></td> + <td>Bit field</td> </tr> <tr> - <td align="center"><code>5</code></td> - <td>Opaque</td> + <td align="center"><code>5</code></td> + <td>Opaque</td> </tr> <tr> - <td align="center"><code>6</code></td> - <td>Compound</td> + <td align="center"><code>6</code></td> + <td>Compound</td> </tr> <tr> - <td align="center"><code>7</code></td> - <td>Reference</td> + <td align="center"><code>7</code></td> + <td>Reference</td> </tr> <tr> - <td align="center"><code>8</code></td> - <td>Enumerated</td> + <td align="center"><code>8</code></td> + <td>Enumerated</td> </tr> <tr> - <td align="center"><code>9</code></td> - <td>Variable-Length</td> + <td align="center"><code>9</code></td> + <td>Variable-Length</td> </tr> <tr> - <td align="center"><code>10</code></td> - <td>Array</td> + <td align="center"><code>10</code></td> + <td>Array</td> </tr> - </table></p> + </table> + <p></p> - </td> - </tr> + </td> + </tr> - <tr> - <td><p>Class Bit Fields</p></td> - <td> - <p>The information in these bit fields is specific to each datatype - class and is described below. All bits not defined for a - datatype class are set to zero. - </p> - </td> - </tr> + <tr> + <td><p>Class Bit Fields</p></td> + <td> + <p>The information in these bit fields is specific to each + datatype class and is described below. All bits not defined for a + datatype class are set to zero.</p> + </td> + </tr> - <tr> - <td><p>Size</p></td> - <td> - <p>The size of a datatype element in bytes. - </p> - </td> - </tr> + <tr> + <td><p>Size</p></td> + <td> + <p>The size of a datatype element in bytes.</p> + </td> + </tr> - <tr> - <td><p>Properties</p></td> - <td> - <p>This variable-sized sequence of bytes encodes information - specific to each datatype class and is described for each class - below. If there is no property information specified for a - datatype class, the size of this field is zero bytes. - </p> - </td> - </tr> + <tr> + <td><p>Properties</p></td> + <td> + <p>This variable-sized sequence of bytes encodes information + specific to each datatype class and is described for each class + below. If there is no property information specified for a datatype + class, the size of this field is zero bytes.</p> + </td> + </tr> - </table> - </div> + </table> +</div> - <br /> - <p>Class specific information for Fixed-Point Numbers (Class 0):</p> - - <div align="center"> - <table class="desc"> - <caption> - Fixed-point Bit Field Description - </caption> - - <tr> - <th width="10%">Bits</th> - <th>Meaning</th> - </tr> - - <tr> - <td><p>0</p></td> - <td><p><b>Byte Order.</b> If zero, byte order is little-endian; - otherwise, byte order is big endian.</p></td> - </tr> - - <tr> - <td><p>1, 2</p></td> - <td><p><b>Padding type.</b> Bit 1 is the lo_pad bit and bit 2 - is the hi_pad bit. If a datum has unused bits at either - end, then the lo_pad or hi_pad bit is copied to those - locations.</p></td> - </tr> - - <tr> - <td><p>3</p></td> - <td><p><b>Signed.</b> If this bit is set then the fixed-point - number is in 2’s complement form.</p></td> - </tr> - - <tr> - <td><p>4-23</p></td> - <td><p>Reserved (zero).</p></td> - </tr> - </table> - </div> +<br /> +<p>Class specific information for Fixed-Point Numbers (Class 0):</p> - <br /> - <div align="center"> - <table class="format"> - <caption> - Fixed-Point Property Description - </caption> - - <tr> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - </tr> - - <tr> - <td colspan="2">Bit Offset</td> - <td colspan="2">Bit Precision</td> - </tr> - </table> - </div> +<div align="center"> + <table class="desc"> + <caption>Fixed-point Bit Field Description</caption> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Bit Offset</p></td> - <td> - <p>The bit offset of the first significant bit of the fixed-point - value within the datatype. The bit offset specifies the number - of bits “to the right of” the value (which are set to the - lo_pad bit value). - </p> - </td> - </tr> - - <tr> - <td><p>Bit Precision</p></td> - <td> - <p>The number of bits of precision of the fixed-point value - within the datatype. This value, combined with the datatype - element’s size and the Bit Offset field specifies the number - of bits “to the left of” the value (which are set to the - hi_pad bit value). - </p> - </td> - </tr> + <tr> + <th width="10%">Bits</th> + <th>Meaning</th> + </tr> - </table> - </div> + <tr> + <td><p>0</p></td> + <td><p> + <b>Byte Order.</b> If zero, byte order is little-endian; otherwise, + byte order is big endian. + </p></td> + </tr> + <tr> + <td><p>1, 2</p></td> + <td><p> + <b>Padding type.</b> Bit 1 is the lo_pad bit and bit 2 is the + hi_pad bit. If a datum has unused bits at either end, then the + lo_pad or hi_pad bit is copied to those locations. + </p></td> + </tr> - <br /> - <p>Class specific information for Floating-Point Numbers (Class 1):</p> - - <div align="center"> - <table class="desc"> - <caption> - Floating-Point Bit Field Description - </caption> - - <tr> - <th width="10%">Bits</th> - <th>Meaning</th> - </tr> - - <tr> - <td><p>0, 6</p></td> - <td><p><b>Byte Order.</b> These two non-contiguous bits specify the - “endianness” of the bytes in the datatype element. - <table class="list"> - <tr> - <th width="10%" align="center">Bit 6</th> - <th width="10%" align="center">Bit 0</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td align="center"><code>0</code></td> - <td>Byte order is little-endian - </td> - </tr> - <tr> - <td align="center"><code>0</code></td> - <td align="center"><code>1</code></td> - <td>Byte order is big-endian - </td> - </tr> - <tr> - <td align="center"><code>1</code></td> - <td align="center"><code>0</code></td> - <td>Reserved - </td> - </tr> - <tr> - <td align="center"><code>1</code></td> - <td align="center"><code>1</code></td> - <td>Byte order is VAX-endian - </td> - </tr> - </table></p> - </td> - </tr> - - <tr> - <td><p>1, 2, 3</p></td> - <td><p><b>Padding type.</b> Bit 1 is the low bits pad type, bit 2 - is the high bits pad type, and bit 3 is the internal bits - pad type. If a datum has unused bits at either end or between - the sign bit, exponent, or mantissa, then the value of bit - 1, 2, or 3 is copied to those locations.</p></td> - </tr> - - <tr> - <td><p>4-5</p></td> - <td><p><b>Mantissa Normalization.</b> This 2-bit bit field specifies - how the most significant bit of the mantissa is managed. + <tr> + <td><p>3</p></td> + <td><p> + <b>Signed.</b> If this bit is set then the fixed-point number is in + 2’s complement form. + </p></td> + </tr> + + <tr> + <td><p>4-23</p></td> + <td><p>Reserved (zero).</p></td> + </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="format"> + <caption>Fixed-Point Property Description</caption> + + <tr> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + </tr> + + <tr> + <td colspan="2">Bit Offset</td> + <td colspan="2">Bit Precision</td> + </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Bit Offset</p></td> + <td> + <p>The bit offset of the first significant bit of the + fixed-point value within the datatype. The bit offset specifies the + number of bits “to the right of” the value (which are + set to the lo_pad bit value).</p> + </td> + </tr> + + <tr> + <td><p>Bit Precision</p></td> + <td> + <p>The number of bits of precision of the fixed-point value + within the datatype. This value, combined with the datatype + element’s size and the Bit Offset field specifies the number + of bits “to the left of” the value (which are set to + the hi_pad bit value).</p> + </td> + </tr> + + </table> +</div> + + +<br /> +<p>Class specific information for Floating-Point Numbers (Class 1):</p> + +<div align="center"> + <table class="desc"> + <caption>Floating-Point Bit Field Description</caption> + + <tr> + <th width="10%">Bits</th> + <th>Meaning</th> + </tr> + + <tr> + <td><p>0, 6</p></td> + <td><p> + <b>Byte Order.</b> These two non-contiguous bits specify the + “endianness” of the bytes in the datatype element. + </p> <table class="list"> <tr> - <th width="20%" align="center">Value</th> - <th width="80%" align="left">Description</th> + <th width="10%" align="center">Bit 6</th> + <th width="10%" align="center">Bit 0</th> + <th width="80%" align="left">Description</th> </tr> <tr> - <td align="center"><code>0</code></td> - <td>No normalization - </td> + <td align="center"><code>0</code></td> + <td align="center"><code>0</code></td> + <td>Byte order is little-endian</td> </tr> <tr> - <td align="center"><code>1</code></td> - <td>The most significant bit of the mantissa is always set - (except for 0.0). - </td> + <td align="center"><code>0</code></td> + <td align="center"><code>1</code></td> + <td>Byte order is big-endian</td> </tr> <tr> - <td align="center"><code>2</code></td> - <td>The most significant bit of the mantissa is not stored, - but is implied to be set. - </td> + <td align="center"><code>1</code></td> + <td align="center"><code>0</code></td> + <td>Reserved</td> </tr> <tr> - <td align="center"><code>3</code></td> - <td>Reserved. - </td> + <td align="center"><code>1</code></td> + <td align="center"><code>1</code></td> + <td>Byte order is VAX-endian</td> </tr> - </table></p> + </table> + <p></p></td> + </tr> + + <tr> + <td><p>1, 2, 3</p></td> + <td><p> + <b>Padding type.</b> Bit 1 is the low bits pad type, bit 2 is the + high bits pad type, and bit 3 is the internal bits pad type. If a + datum has unused bits at either end or between the sign bit, + exponent, or mantissa, then the value of bit 1, 2, or 3 is copied + to those locations. + </p></td> + </tr> + + <tr> + <td><p>4-5</p></td> + <td><p> + <b>Mantissa Normalization.</b> This 2-bit bit field specifies how + the most significant bit of the mantissa is managed. + </p> + <table class="list"> + <tr> + <th width="20%" align="center">Value</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>No normalization</td> + </tr> + <tr> + <td align="center"><code>1</code></td> + <td>The most significant bit of the mantissa is always set + (except for 0.0).</td> + </tr> + <tr> + <td align="center"><code>2</code></td> + <td>The most significant bit of the mantissa is not stored, + but is implied to be set.</td> + </tr> + <tr> + <td align="center"><code>3</code></td> + <td>Reserved.</td> + </tr> + </table> + <p></p></td> + </tr> + + <tr> + <td><p>7</p></td> + <td><p>Reserved (zero).</p></td> + </tr> + + <tr> + <td><p>8-15</p></td> + <td><p> + <b>Sign Location.</b> This is the bit position of the sign bit. + Bits are numbered with the least significant bit zero. + </p></td> + </tr> + + <tr> + <td><p>16-23</p></td> + <td><p>Reserved (zero).</p></td> + </tr> + + </table> +</div> + +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Floating-Point Property Description</caption> + + <tr> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + </tr> + + <tr> + <td colspan="2">Bit Offset</td> + <td colspan="2">Bit Precision</td> + </tr> + + <tr> + <td>Exponent Location</td> + <td>Exponent Size</td> + <td>Mantissa Location</td> + <td>Mantissa Size</td> + </tr> + + <tr> + <td colspan="4">Exponent Bias</td> + </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Bit Offset</p></td> + <td> + <p>The bit offset of the first significant bit of the + floating-point value within the datatype. The bit offset specifies + the number of bits “to the right of” the value.</p> </td> - </tr> + </tr> - <tr> - <td><p>7</p></td> - <td><p>Reserved (zero).</p></td> - </tr> + <tr> + <td><p>Bit Precision</p></td> + <td> + <p>The number of bits of precision of the floating-point value + within the datatype.</p> + </td> + </tr> - <tr> - <td><p>8-15</p></td> - <td><p><b>Sign Location.</b> This is the bit position of the sign - bit. Bits are numbered with the least significant bit zero.</p></td> - </tr> + <tr> + <td><p>Exponent Location</p></td> + <td> + <p>The bit position of the exponent field. Bits are numbered + with the least significant bit number zero.</p> + </td> + </tr> - <tr> - <td><p>16-23</p></td> - <td><p>Reserved (zero).</p></td> - </tr> + <tr> + <td><p>Exponent Size</p></td> + <td> + <p>The size of the exponent field in bits.</p> + </td> + </tr> - </table> - </div> + <tr> + <td><p>Mantissa Location</p></td> + <td> + <p>The bit position of the mantissa field. Bits are numbered + with the least significant bit number zero.</p> + </td> + </tr> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Floating-Point Property Description - </caption> - - <tr> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - </tr> - - <tr> - <td colspan="2">Bit Offset</td> - <td colspan="2">Bit Precision</td> - </tr> - - <tr> - <td>Exponent Location</td> - <td>Exponent Size</td> - <td>Mantissa Location</td> - <td>Mantissa Size</td> - </tr> - - <tr> - <td colspan="4">Exponent Bias</td> - </tr> - </table> - </div> + <tr> + <td><p>Mantissa Size</p></td> + <td> + <p>The size of the mantissa field in bits.</p> + </td> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Bit Offset</p></td> - <td> - <p>The bit offset of the first significant bit of the floating-point - value within the datatype. The bit offset specifies the number - of bits “to the right of” the value. - </p> - </td> - </tr> - - <tr> - <td><p>Bit Precision</p></td> - <td> - <p>The number of bits of precision of the floating-point value - within the datatype. - </p> - </td> - </tr> - - <tr> - <td><p>Exponent Location</p></td> - <td> - <p>The bit position of the exponent field. Bits are numbered with - the least significant bit number zero. - </p> - </td> - </tr> - - <tr> - <td><p>Exponent Size</p></td> - <td> - <p>The size of the exponent field in bits. - </p> - </td> - </tr> - - <tr> - <td><p>Mantissa Location</p></td> - <td> - <p>The bit position of the mantissa field. Bits are numbered with - the least significant bit number zero. - </p> - </td> - </tr> - - <tr> - <td><p>Mantissa Size</p></td> - <td> - <p>The size of the mantissa field in bits. - </p> - </td> - </tr> - - <tr> - <td><p>Exponent Bias</p></td> - <td> - <p>The bias of the exponent field. - </p> - </td> - </tr> + <tr> + <td><p>Exponent Bias</p></td> + <td> + <p>The bias of the exponent field.</p> + </td> + </tr> - </table> - </div> + </table> +</div> - <br /> - <p>Class specific information for Time (Class 2):</p> - - - <div align="center"> - <table class="desc"> - <caption> - Time Bit Field Description - </caption> - - <tr> - <th width="10%">Bits</th> - <th>Meaning</th> - </tr> - - <tr> - <td><p>0</p></td> - <td><p><b>Byte Order.</b> If zero, byte order is little-endian; - otherwise, byte order is big endian.</p></td> - </tr> - - <tr> - <td><p>1-23</p></td> - <td><p>Reserved (zero).</p></td> - </tr> - </table> - </div> +<br /> +<p>Class specific information for Time (Class 2):</p> - <br /> - <div align="center"> - <table class="format"> - <caption> - Time Property Description - </caption> - - <tr> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - </tr> - - <tr> - <td colspan="2">Bit Precision</td> - </tr> - </table> - </div> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Bit Precision</p></td> - <td> - <p>The number of bits of precision of the time value. - </p> - </td> - </tr> +<div align="center"> + <table class="desc"> + <caption>Time Bit Field Description</caption> - </table> - </div> + <tr> + <th width="10%">Bits</th> + <th>Meaning</th> + </tr> + <tr> + <td><p>0</p></td> + <td><p> + <b>Byte Order.</b> If zero, byte order is little-endian; otherwise, + byte order is big endian. + </p></td> + </tr> - <br /> - <p>Class specific information for Strings (Class 3):</p> - - - <div align="center"> - <table class="desc"> - <caption> - String Bit Field Description - </caption> - - <tr> - <th width="10%">Bits</th> - <th>Meaning</th> - </tr> - - <tr> - <td><p>0-3</p></td> - <td><p><b>Padding type.</b> This four-bit value determines the - type of padding to use for the string. The values are: - - <table class="list"> - <tr> - <th width="20%" align="center">Value</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>Null Terminate: A zero byte marks the end of the - string and is guaranteed to be present after - converting a long string to a short string. When - converting a short string to a long string the value is - padded with additional null characters as necessary. - </td> - </tr> - - <tr> - <td align="center"><code>1</code></td> - <td>Null Pad: Null characters are added to the end of - the value during conversions from short values to long - values but conversion in the opposite direction simply - truncates the value. - </td> - </tr> - - <tr> - <td align="center"><code>2</code></td> - <td>Space Pad: Space characters are added to the end of - the value during conversions from short values to long - values but conversion in the opposite direction simply - truncates the value. This is the Fortran - representation of the string. - </td> - </tr> - - <tr> - <td align="center"><code>3-15</code></td> - <td>Reserved - </td> - </tr> - </table></p> - </td> - </tr> - - <tr> - <td><p>4-7</p></td> - <td><p><b>Character Set.</b> The character set used to - encode the string. - <table class="list"> - <tr> - <th width="20%" align="center">Value</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>ASCII character set encoding - </td> - </tr> - - <tr> - <td align="center"><code>1</code></td> - <td>UTF-8 character set encoding - </td> - </tr> - - <tr> - <td align="center"><code>2-15</code></td> - <td>Reserved - </td> - </tr> - </table></p> - </td> - </tr> - - <tr> - <td><p>8-23</p></td> - <td><p>Reserved (zero).</p></td> - </tr> - </table> - </div> - - <p>There are no properties defined for the string class. - </p> - - - <p>Class specific information for bit fields (Class 4):</p> - - <div align="center"> - <table class="desc"> - <caption> - Bitfield Bit Field Description - </caption> - - <tr> - <th width="10%">Bits</th> - <th>Meaning</th> - </tr> - - <tr> - <td><p>0</p></td> - <td><p><b>Byte Order.</b> If zero, byte order is little-endian; - otherwise, byte order is big endian.</p></td> - </tr> - - <tr> - <td><p>1, 2</p></td> - <td><p><b>Padding type.</b> Bit 1 is the lo_pad type and bit 2 - is the hi_pad type. If a datum has unused bits at either - end, then the lo_pad or hi_pad bit is copied to those - locations.</p></td> - </tr> - - <tr> - <td><p>3-23</p></td> - <td><p>Reserved (zero).</p></td> - </tr> - </table> - </div> + <tr> + <td><p>1-23</p></td> + <td><p>Reserved (zero).</p></td> + </tr> + </table> +</div> - <br /> - <div align="center"> - <table class="format"> - <caption> - Bit Field Property Description - </caption> - - <tr> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - </tr> - - <tr> - <td colspan="2">Bit Offset</td> - <td colspan="2">Bit Precision</td> - </tr> - </table> - </div> +<br /> +<div align="center"> + <table class="format"> + <caption>Time Property Description</caption> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Bit Offset</p></td> - <td> - <p>The bit offset of the first significant bit of the bit field - within the datatype. The bit offset specifies the number - of bits “to the right of” the value. - </p> - </td> - </tr> - - <tr> - <td><p>Bit Precision</p></td> - <td> - <p>The number of bits of precision of the bit field - within the datatype. - </p> - </td> - </tr> - </table> - </div> + <tr> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + </tr> + <tr> + <td colspan="2">Bit Precision</td> + </tr> + </table> +</div> - <br /> - <p>Class specific information for Opaque (Class 5):</p> - - <div align="center"> - <table class="desc"> - <caption> - Opaque Bit Field Description - </caption> - - <tr> - <th width="10%">Bits</th> - <th>Meaning</th> - </tr> - - <tr> - <td><p>0-7</p></td> - <td><p>Length of ASCII tag in bytes.</p></td> - </tr> - - <tr> - <td><p>8-23</p></td> - <td><p>Reserved (zero).</p></td> - </tr> - </table> - </div> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> - <br /> - <div align="center"> - <table class="format"> - <caption> - Opaque Property Description - </caption> - - <tr> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - </tr> - - <tr> - <td colspan="4"><br />ASCII Tag<br /> - <br /></td> - </tr> - </table> - </div> + <tr> + <td><p>Bit Precision</p></td> + <td> + <p>The number of bits of precision of the time value.</p> + </td> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>ASCII Tag</p></td> - <td> - <p>This NUL-terminated string provides a description for the - opaque type. It is NUL-padded to a multiple of 8 bytes. - </p> - </td> - </tr> - </table> - </div> + </table> +</div> - <br /> - <p>Class specific information for Compound (Class 6):</p> - - <div align="center"> - <table class="desc"> - <caption> - Compound Bit Field Description - </caption> - - <tr> - <th width="10%">Bits</th> - <th>Meaning</th> - </tr> - - <tr> - <td><p>0-15</p></td> - <td><p><b>Number of Members.</b> This field contains the number - of members defined for the compound datatype. The member - definitions are listed in the Properties field of the data - type message.</p></td> - </tr> - - <tr> - <td><p>16-23</p></td> - <td><p>Reserved (zero).</p></td> - </tr> - </table> - </div> +<br /> +<p>Class specific information for Strings (Class 3):</p> - <p>The Properties field of a compound datatype is a list of the - member definitions of the compound datatype. The member - definitions appear one after another with no intervening bytes. - The member types are described with a (recursively) encoded datatype - message.</p> +<div align="center"> + <table class="desc"> + <caption>String Bit Field Description</caption> - <p>Note that the property descriptions are different for different - versions of the datatype version. Additionally note that the version - 0 datatype encoding is deprecated and has been replaced with later - encodings in versions of the HDF5 Library from the 1.4 release - onward.</p> + <tr> + <th width="10%">Bits</th> + <th>Meaning</th> + </tr> + <tr> + <td><p>0-3</p></td> + <td><p> + <b>Padding type.</b> This four-bit value determines the type of + padding to use for the string. The values are: - <div align="center"> - <table class="format"> - <caption> - Compound Properties Description for Datatype Version 1 - </caption> + </p> + <table class="list"> + <tr> + <th width="20%" align="center">Value</th> + <th width="80%" align="left">Description</th> + </tr> - <tr> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - </tr> + <tr> + <td align="center"><code>0</code></td> + <td>Null Terminate: A zero byte marks the end of the string + and is guaranteed to be present after converting a long string to + a short string. When converting a short string to a long string + the value is padded with additional null characters as necessary. + </td> + </tr> - <tr> - <td colspan="4"><br />Name<br /><br /></td> - </tr> + <tr> + <td align="center"><code>1</code></td> + <td>Null Pad: Null characters are added to the end of the + value during conversions from short values to long values but + conversion in the opposite direction simply truncates the value. + </td> + </tr> - <tr> - <td colspan="4">Byte Offset of Member</td> - </tr> + <tr> + <td align="center"><code>2</code></td> + <td>Space Pad: Space characters are added to the end of the + value during conversions from short values to long values but + conversion in the opposite direction simply truncates the value. + This is the Fortran representation of the string.</td> + </tr> - <tr> - <td>Dimensionality</td> - <td colspan="3">Reserved (zero)</td> - </tr> + <tr> + <td align="center"><code>3-15</code></td> + <td>Reserved</td> + </tr> + </table> + <p></p></td> + </tr> - <tr> - <td colspan="4">Dimension Permutation</td> - </tr> + <tr> + <td><p>4-7</p></td> + <td><p> + <b>Character Set.</b> The character set used to encode the string. + </p> + <table class="list"> + <tr> + <th width="20%" align="center">Value</th> + <th width="80%" align="left">Description</th> + </tr> - <tr> - <td colspan="4">Reserved (zero)</td> - </tr> + <tr> + <td align="center"><code>0</code></td> + <td>ASCII character set encoding</td> + </tr> - <tr> - <td colspan="4">Dimension #1 Size (required)</td> - </tr> + <tr> + <td align="center"><code>1</code></td> + <td>UTF-8 character set encoding</td> + </tr> - <tr> - <td colspan="4">Dimension #2 Size (required)</td> - </tr> + <tr> + <td align="center"><code>2-15</code></td> + <td>Reserved</td> + </tr> + </table> + <p></p></td> + </tr> - <tr> - <td colspan="4">Dimension #3 Size (required)</td> - </tr> + <tr> + <td><p>8-23</p></td> + <td><p>Reserved (zero).</p></td> + </tr> + </table> +</div> - <tr> - <td colspan="4">Dimension #4 Size (required)</td> - </tr> +<p>There are no properties defined for the string class.</p> - <tr> - <td colspan="4"><br />Member Type Message<br /><br /></td> - </tr> - </table> - </div> +<p>Class specific information for bit fields (Class 4):</p> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Name</p></td> - <td> - <p>This NUL-terminated string provides a description for the - opaque type. It is NUL-padded to a multiple of 8 bytes. - </p> - </td> - </tr> - - <tr> - <td><p>Byte Offset of Member</p></td> - <td> - <p>This is the byte offset of the member within the datatype. - </p> - </td> - </tr> - - <tr> - <td><p>Dimensionality</p></td> - <td> - <p>If set to zero, this field indicates a scalar member. If set - to a value greater than zero, this field indicates that the - member is an array of values. For array members, the size of - the array is indicated by the ‘Size of Dimension n’ field in - this message. - </p> - </td> - </tr> - - <tr> - <td><p>Dimension Permutation</p></td> - <td> - <p>This field was intended to allow an array field to have - its dimensions permuted, but this was never implemented. - This field should always be set to zero. - </p> - </td> - </tr> - - <tr> - <td><p>Dimension #n Size</p></td> - <td> - <p>This field is the size of a dimension of the array field as - stored in the file. The first dimension stored in the list of - dimensions is the slowest changing dimension and the last - dimension stored is the fastest changing dimension. - </p> - </td> - </tr> - - <tr> - <td><p>Member Type Message</p></td> - <td> - <p>This field is a datatype message describing the datatype of - the member. - </p> - </td> - </tr> +<div align="center"> + <table class="desc"> + <caption>Bitfield Bit Field Description</caption> - </table> - </div> + <tr> + <th width="10%">Bits</th> + <th>Meaning</th> + </tr> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Compound Properties Description for Datatype Version 2 - </caption> - - <tr> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - </tr> - - <tr> - <td colspan="4"><br />Name<br /><br /></td> - </tr> - - <tr> - <td colspan="4">Byte Offset of Member</td> - </tr> - - <tr> - <td colspan="4"><br />Member Type Message<br /><br /></td> - </tr> + <tr> + <td><p>0</p></td> + <td><p> + <b>Byte Order.</b> If zero, byte order is little-endian; otherwise, + byte order is big endian. + </p></td> + </tr> - </table> - </div> + <tr> + <td><p>1, 2</p></td> + <td><p> + <b>Padding type.</b> Bit 1 is the lo_pad type and bit 2 is the + hi_pad type. If a datum has unused bits at either end, then the + lo_pad or hi_pad bit is copied to those locations. + </p></td> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Name</p></td> - <td> - <p>This NUL-terminated string provides a description for the - opaque type. It is NUL-padded to a multiple of 8 bytes. - </p> - </td> - </tr> - - <tr> - <td><p>Byte Offset of Member</p></td> - <td> - <p>This is the byte offset of the member within the datatype. - </p> - </td> - </tr> - - <tr> - <td><p>Member Type Message</p></td> - <td> - <p>This field is a datatype message describing the datatype of - the member. - </p> - </td> - </tr> + <tr> + <td><p>3-23</p></td> + <td><p>Reserved (zero).</p></td> + </tr> + </table> +</div> - </table> - </div> +<br /> +<div align="center"> + <table class="format"> + <caption>Bit Field Property Description</caption> + <tr> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + </tr> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Compound Properties Description for Datatype Version 3 - </caption> - - <tr> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - </tr> - - <tr> - <td colspan="4"><br />Name<br /><br /></td> - </tr> - - <tr> - <td colspan="4">Byte Offset of Member <em>(variable size)</em></td> - </tr> - - <tr> - <td colspan="4"><br />Member Type Message<br /><br /></td> - </tr> + <tr> + <td colspan="2">Bit Offset</td> + <td colspan="2">Bit Precision</td> + </tr> + </table> +</div> - </table> - </div> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Name</p></td> - <td><p>This NUL-terminated string provides a description for the - opaque type. It is <em>not</em> NUL-padded to a multiple of 8 - bytes.</p></td> - </tr> - - <tr> - <td><p>Byte Offset of Member</p></td> - <td><p>This is the byte offset of the member within the datatype. - The field size is the minimum number of bytes necessary, - based on the size of the datatype element. For example, a - datatype element size of less than 256 bytes uses a 1 byte - length, a datatype element size of 256-65535 bytes uses a - 2 byte length, and so on.</p></td> - </tr> - - <tr> - <td><p>Member Type Message</p></td> - <td><p>This field is a datatype message describing the datatype of - the member.</p></td> - </tr> + <tr> + <td><p>Bit Offset</p></td> + <td> + <p>The bit offset of the first significant bit of the bit field + within the datatype. The bit offset specifies the number of bits + “to the right of” the value.</p> + </td> + </tr> - </table> - </div> + <tr> + <td><p>Bit Precision</p></td> + <td> + <p>The number of bits of precision of the bit field within the + datatype.</p> + </td> + </tr> + </table> +</div> - <br /> - <p>Class specific information for Reference (Class 7):</p> - - <div align="center"> - <table class="desc"> - <caption> - Reference Bit Field Description - </caption> - - <tr> - <th width="10%">Bits</th> - <th>Meaning</th> - </tr> - - <tr> - <td><p>0-3</p></td> - <td><p><b>Type.</b> This four-bit value contains the type of reference - described. The values defined are: - - <table class="list"> - <tr> - <th width="20%" align="center">Value</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>Object Reference: A reference to another object in this - HDF5 file. - </td> - </tr> - - <tr> - <td align="center"><code>1</code></td> - <td>Dataset Region Reference: A reference to a region within - a dataset in this HDF5 file. - </td> - </tr> - - <tr> - <td align="center"><code>2-15</code></td> - <td>Reserved - </td> - </tr> - </table></p> - - </td> - </tr> - - <tr> - <td><p>4-23</p></td> - <td><p>Reserved (zero).</p></td> - </tr> - </table> - </div> +<br /> +<p>Class specific information for Opaque (Class 5):</p> - <p>There are no properties defined for the reference class. - </p> +<div align="center"> + <table class="desc"> + <caption>Opaque Bit Field Description</caption> + <tr> + <th width="10%">Bits</th> + <th>Meaning</th> + </tr> - <br /> - <p>Class specific information for Enumeration (Class 8):</p> - - <div align="center"> - <table class="desc"> - <caption> - Enumeration Bit Field Description - </caption> - - <tr> - <th width="10%">Bits</th> - <th>Meaning</th> - </tr> - - <tr> - <td><p>0-15</p></td> - <td><p><b>Number of Members.</b> The number of name/value - pairs defined for the enumeration type.</p></td> - </tr> - - <tr> - <td><p>16-23</p></td> - <td><p>Reserved (zero).</p></td> - </tr> - </table> - </div> + <tr> + <td><p>0-7</p></td> + <td><p>Length of ASCII tag in bytes.</p></td> + </tr> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Enumeration Property Description for Datatype Versions 1 & 2 - </caption> + <tr> + <td><p>8-23</p></td> + <td><p>Reserved (zero).</p></td> + </tr> + </table> +</div> - <tr> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - </tr> +<br /> +<div align="center"> + <table class="format"> + <caption>Opaque Property Description</caption> - <tr> - <td colspan="4"><br />Base Type<br /><br /></td> - </tr> + <tr> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + </tr> - <tr> - <td colspan="4"><br />Names<br /><br /></td> - </tr> + <tr> + <td colspan="4"><br />ASCII Tag<br /> <br /></td> + </tr> + </table> +</div> - <tr> - <td colspan="4"><br />Values<br /><br /></td> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> </tr> - </table> - </div> + <tr> + <td><p>ASCII Tag</p></td> + <td> + <p>This NUL-terminated string provides a description for the + opaque type. It is NUL-padded to a multiple of 8 bytes.</p> + </td> + </tr> + </table> +</div> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Base Type</p></td> - <td> - <p>Each enumeration type is based on some parent type, usually an - integer. The information for that parent type is described - recursively by this field. - </p> - </td> - </tr> - - <tr> - <td><p>Names</p></td> - <td> - <p>The name for each name/value pair. Each name is stored as a null - terminated ASCII string in a multiple of eight bytes. The names - are in no particular order. - </p> - </td> - </tr> - - <tr> - <td><p>Values</p></td> - <td> - <p>The list of values in the same order as the names. The values - are packed (no inter-value padding) and the size of each value - is determined by the parent type. - </p> - </td> - </tr> - </table> - </div> +<br /> +<p>Class specific information for Compound (Class 6):</p> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Enumeration Property Description for Datatype Version 3 - </caption> +<div align="center"> + <table class="desc"> + <caption>Compound Bit Field Description</caption> + + <tr> + <th width="10%">Bits</th> + <th>Meaning</th> + </tr> + + <tr> + <td><p>0-15</p></td> + <td><p> + <b>Number of Members.</b> This field contains the number of members + defined for the compound datatype. The member definitions are + listed in the Properties field of the data type message. + </p></td> + </tr> - <tr> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - </tr> + <tr> + <td><p>16-23</p></td> + <td><p>Reserved (zero).</p></td> + </tr> + </table> +</div> + + +<p>The Properties field of a compound datatype is a list of the + member definitions of the compound datatype. The member definitions + appear one after another with no intervening bytes. The member types + are described with a (recursively) encoded datatype message.</p> - <tr> - <td colspan="4"><br />Base Type<br /><br /></td> - </tr> +<p>Note that the property descriptions are different for different + versions of the datatype version. Additionally note that the version 0 + datatype encoding is deprecated and has been replaced with later + encodings in versions of the HDF5 Library from the 1.4 release onward.</p> - <tr> - <td colspan="4"><br />Names<br /><br /></td> - </tr> - <tr> - <td colspan="4"><br />Values<br /><br /></td> +<div align="center"> + <table class="format"> + <caption>Compound Properties Description for Datatype + Version 1</caption> + + <tr> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + <th width="25%">Byte</th> </tr> - </table> - </div> + <tr> + <td colspan="4"><br />Name<br /> + <br /></td> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Base Type</p></td> - <td> - <p>Each enumeration type is based on some parent type, usually an - integer. The information for that parent type is described - recursively by this field. - </p> - </td> - </tr> - - <tr> - <td><p>Names</p></td> - <td> - <p>The name for each name/value pair. Each name is stored as a null - terminated ASCII string, <em>not</em> padded to a multiple of - eight bytes. The names are in no particular order. - </p> - </td> - </tr> - - <tr> - <td><p>Values</p></td> - <td> - <p>The list of values in the same order as the names. The values - are packed (no inter-value padding) and the size of each value - is determined by the parent type. - </p> - </td> - </tr> + <tr> + <td colspan="4">Byte Offset of Member</td> + </tr> - </table> - </div> + <tr> + <td>Dimensionality</td> + <td colspan="3">Reserved (zero)</td> + </tr> + <tr> + <td colspan="4">Dimension Permutation</td> + </tr> + <tr> + <td colspan="4">Reserved (zero)</td> + </tr> - <br /> - <p>Class specific information for Variable-Length (Class 9):</p> - - <div align="center"> - <table class="desc"> - <caption> - Variable-Length Bit Field Description - </caption> - - <tr> - <th width="10%">Bits</th> - <th>Meaning</th> - </tr> - - <tr> - <td><p>0-3</p></td> - <td><p><b>Type.</b> This four-bit value contains the type of - variable-length datatype described. The values defined are: - - <table class="list"> - <tr> - <th width="20%" align="center">Value</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>Sequence: A variable-length sequence of any datatype. - Variable-length sequences do not have padding or - character set information. - </td> - </tr> - - <tr> - <td align="center"><code>1</code></td> - <td>String: A variable-length sequence of characters. - Variable-length strings have padding and character set - information. - </td> - </tr> - - <tr> - <td align="center"><code>2-15</code></td> - <td>Reserved - </td> - </tr> - </table></p> - - </td> - </tr> - - <tr> - <td><p>4-7</p></td> - <td><p><b>Padding type.</b> (variable-length string only) - This four-bit value determines the type of padding - used for variable-length strings. The values are the same - as for the string padding type, as follows: - <table class="list"> - <tr> - <th width="20%" align="center">Value</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>Null terminate: A zero byte marks the end of a string - and is guaranteed to be present after converting a long - string to a short string. When converting a short string - to a long string, the value is padded with additional null - characters as necessary. - </td> - </tr> - - <tr> - <td align="center"><code>1</code></td> - <td>Null pad: Null characters are added to the end of the - value during conversion from a short string to a longer - string. Conversion from a long string to a shorter string - simply truncates the value. - </td> - </tr> - - <tr> - <td align="center"><code>2</code></td> - <td>Space pad: Space characters are added to the end of the - value during conversion from a short string to a longer - string. Conversion from a long string to a shorter string - simply truncates the value. This is the Fortran - representation of the string. - </td> - </tr> - - <tr> - <td align="center"><code>3-15</code></td> - <td>Reserved - </td> - </tr> - </table></p> - - <p>This value is set to zero for variable-length sequences.</p> - - </td> - </tr> - - <tr> - <td><p>8-11</p></td> - <td><p><b>Character Set.</b> (variable-length string only) - This four-bit value specifies the character set - to be used for encoding the string: - <table class="list"> - <tr> - <th width="20%" align="center">Value</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>ASCII character set encoding - </td> - </tr> - - <tr> - <td align="center"><code>1</code></td> - <td>UTF-8 character set encoding - </td> - </tr> - - <tr> - <td align="center"><code>2-15</code></td> - <td>Reserved - </td> - </tr> - </table></p> - - <p>This value is set to zero for variable-length sequences.</p> - - </td> - </tr> - - <tr> - <td><p>12-23</p></td> - <td><p>Reserved (zero).</p></td> - </tr> - </table> - </div> + <tr> + <td colspan="4">Dimension #1 Size (required)</td> + </tr> - <br /> - <br /> - <div align="center"> - <table class="format"> - <caption> - Variable-Length Property Description - </caption> + <tr> + <td colspan="4">Dimension #2 Size (required)</td> + </tr> <tr> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - <th width="25%">Byte</th> + <td colspan="4">Dimension #3 Size (required)</td> </tr> <tr> - <td colspan="4"><br />Base Type<br /><br /></td> + <td colspan="4">Dimension #4 Size (required)</td> </tr> - </table> - </div> + <tr> + <td colspan="4"><br />Member Type Message<br /> + <br /></td> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="10%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Base Type</p></td> - <td> - <p>Each variable-length type is based on some parent type. The - information for that parent type is described recursively by - this field. - </p> - </td> - </tr> + </table> +</div> - </table> - </div> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Name</p></td> + <td> + <p>This NUL-terminated string provides a description for the + opaque type. It is NUL-padded to a multiple of 8 bytes.</p> + </td> + </tr> + <tr> + <td><p>Byte Offset of Member</p></td> + <td> + <p>This is the byte offset of the member within the datatype.</p> + </td> + </tr> - <br /> - <p>Class specific information for Array (Class 10):</p> + <tr> + <td><p>Dimensionality</p></td> + <td> + <p>If set to zero, this field indicates a scalar member. If set + to a value greater than zero, this field indicates that the member + is an array of values. For array members, the size of the array is + indicated by the ‘Size of Dimension n’ field in this + message.</p> + </td> + </tr> - <p>There are no bit fields defined for the array class. - </p> + <tr> + <td><p>Dimension Permutation</p></td> + <td> + <p>This field was intended to allow an array field to have its + dimensions permuted, but this was never implemented. This field + should always be set to zero.</p> + </td> + </tr> - <p>Note that the dimension information defined in the property for this - datatype class is independent of dataspace information for a dataset. - The dimension information here describes the dimensionality of the - information within a data element (or a component of an element, if the - array datatype is nested within another datatype) and the dataspace for a - dataset describes the size and locations of the elements in a dataset. - </p> + <tr> + <td><p>Dimension #n Size</p></td> + <td> + <p>This field is the size of a dimension of the array field as + stored in the file. The first dimension stored in the list of + dimensions is the slowest changing dimension and the last dimension + stored is the fastest changing dimension.</p> + </td> + </tr> + <tr> + <td><p>Member Type Message</p></td> + <td> + <p>This field is a datatype message describing the datatype of + the member.</p> + </td> + </tr> - <div align="center"> - <table class="format"> - <caption> - Array Property Description for Datatype Version 2 - </caption> + </table> +</div> + +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Compound Properties Description for Datatype + Version 2</caption> <tr> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - <th width="25%">Byte</th> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + <th width="25%">Byte</th> </tr> - <tr> - <td>Dimensionality</td> - <td colspan="3">Reserved (zero)</td> - </tr> + <tr> + <td colspan="4"><br />Name<br /> + <br /></td> + </tr> + + <tr> + <td colspan="4">Byte Offset of Member</td> + </tr> - <tr> - <td colspan="4">Dimension #1 Size</td> - </tr> - <tr> - <td colspan="4">.<br />.<br />.<br /></td> - </tr> - <tr> - <td colspan="4">Dimension #n Size</td> - </tr> + <tr> + <td colspan="4"><br />Member Type Message<br /> + <br /></td> + </tr> - <tr> - <td colspan="4">Permutation Index #1</td> - </tr> - <tr> - <td colspan="4">.<br />.<br />.<br /></td> - </tr> - <tr> - <td colspan="4">Permutation Index #n</td> - </tr> + </table> +</div> +<br /> +<div align="center"> + <table class="desc"> <tr> - <td colspan="4"><br />Base Type<br /><br /></td> + <th width="30%">Field Name</th> + <th>Description</th> </tr> - </table> - </div> + <tr> + <td><p>Name</p></td> + <td> + <p>This NUL-terminated string provides a description for the + opaque type. It is NUL-padded to a multiple of 8 bytes.</p> + </td> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Dimensionality</p></td> - <td> - <p>This value is the number of dimensions that the array has. - </p> - </td> - </tr> - - <tr> - <td><p>Dimension #n Size</p></td> - <td> - <p>This value is the size of the dimension of the array - as stored in the file. The first dimension stored in - the list of dimensions is the slowest changing dimension - and the last dimension stored is the fastest changing - dimension. - </p> - </td> - </tr> - - <tr> - <td><p>Permutation Index #n</p></td> - <td> - <p>This value is the index permutation used to map - each dimension from the canonical representation to an - alternate axis for each dimension. Currently, dimension - permutations are not supported, and these indices should - be set to the index position minus one. In other words, - the first dimension should be set to 0, the second dimension - should be set to 1, and so on. - </p> - </td> - </tr> - - <tr> - <td><p>Base Type</p></td> - <td> - <p>Each array type is based on some parent type. The - information for that parent type is described recursively by - this field. - </p> - </td> - </tr> + <tr> + <td><p>Byte Offset of Member</p></td> + <td> + <p>This is the byte offset of the member within the datatype.</p> + </td> + </tr> - </table> - </div> + <tr> + <td><p>Member Type Message</p></td> + <td> + <p>This field is a datatype message describing the datatype of + the member.</p> + </td> + </tr> - <br /> - <div align="center"> - <table class="format"> - <caption> - Array Property Description for Datatype Version 3 - </caption> + </table> +</div> + + +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Compound Properties Description for Datatype + Version 3</caption> <tr> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - <th width="25%">Byte</th> - <th width="25%">Byte</th> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + <th width="25%">Byte</th> </tr> - <tr> - <td>Dimensionality</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> + <tr> + <td colspan="4"><br />Name<br /> + <br /></td> + </tr> - <tr> - <td colspan="4">Dimension #1 Size</td> - </tr> - <tr> - <td colspan="4">.<br />.<br />.<br /></td> - </tr> - <tr> - <td colspan="4">Dimension #n Size</td> - </tr> + <tr> + <td colspan="4">Byte Offset of Member <em>(variable size)</em></td> + </tr> <tr> - <td colspan="4"><br />Base Type<br /><br /></td> + <td colspan="4"><br />Member Type Message<br /> + <br /></td> </tr> - </table> - </div> + </table> +</div> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Dimensionality</p></td> - <td> - <p>This value is the number of dimensions that the array has. - </p> - </td> - </tr> - - <tr> - <td><p>Dimension #n Size</p></td> - <td> - <p>This value is the size of the dimension of the array - as stored in the file. The first dimension stored in - the list of dimensions is the slowest changing dimension - and the last dimension stored is the fastest changing - dimension. - </p> - </td> - </tr> - - <tr> - <td><p>Base Type</p></td> - <td> - <p>Each array type is based on some parent type. The - information for that parent type is described recursively by - this field. - </p> - </td> - </tr> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> - </table> - </div> + <tr> + <td><p>Name</p></td> + <td><p> + This NUL-terminated string provides a description for the opaque + type. It is <em>not</em> NUL-padded to a multiple of 8 bytes. + </p></td> + </tr> + <tr> + <td><p>Byte Offset of Member</p></td> + <td><p>This is the byte offset of the member within the + datatype. The field size is the minimum number of bytes necessary, + based on the size of the datatype element. For example, a datatype + element size of less than 256 bytes uses a 1 byte length, a + datatype element size of 256-65535 bytes uses a 2 byte length, and + so on.</p></td> + </tr> + + <tr> + <td><p>Member Type Message</p></td> + <td><p>This field is a datatype message describing the + datatype of the member.</p></td> + </tr> + + </table> +</div> <br /> -<h4><a name="OldFillValueMessage">IV.A.2.e. The Data Storage - -Fill Value (Old) Message</a></h4> +<p>Class specific information for Reference (Class 7):</p> - <!-- start msgdesc table --> - <center> +<div align="center"> + <table class="desc"> + <caption>Reference Bit Field Description</caption> + + <tr> + <th width="10%">Bits</th> + <th>Meaning</th> + </tr> + + <tr> + <td><p>0-3</p></td> + <td><p> + <b>Type.</b> This four-bit value contains the type of reference + described. The values defined are: + + </p> + <table class="list"> + <tr> + <th width="20%" align="center">Value</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>Object Reference: A reference to another object in this + HDF5 file.</td> + </tr> + + <tr> + <td align="center"><code>1</code></td> + <td>Dataset Region Reference: A reference to a region within + a dataset in this HDF5 file.</td> + </tr> + + <tr> + <td align="center"><code>2-15</code></td> + <td>Reserved</td> + </tr> + </table> + <p></p></td> + </tr> + + <tr> + <td><p>4-23</p></td> + <td><p>Reserved (zero).</p></td> + </tr> + </table> +</div> + +<p>There are no properties defined for the reference class.</p> + + +<br /> +<p>Class specific information for Enumeration (Class 8):</p> + +<div align="center"> + <table class="desc"> + <caption>Enumeration Bit Field Description</caption> + + <tr> + <th width="10%">Bits</th> + <th>Meaning</th> + </tr> + + <tr> + <td><p>0-15</p></td> + <td><p> + <b>Number of Members.</b> The number of name/value pairs defined + for the enumeration type. + </p></td> + </tr> + + <tr> + <td><p>16-23</p></td> + <td><p>Reserved (zero).</p></td> + </tr> + </table> +</div> + +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Enumeration Property Description for Datatype + Versions 1 & 2</caption> + + <tr> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + </tr> + + <tr> + <td colspan="4"><br />Base Type<br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Names<br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Values<br /> + <br /></td> + </tr> + + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Base Type</p></td> + <td> + <p>Each enumeration type is based on some parent type, usually + an integer. The information for that parent type is described + recursively by this field.</p> + </td> + </tr> + + <tr> + <td><p>Names</p></td> + <td> + <p>The name for each name/value pair. Each name is stored as a + null terminated ASCII string in a multiple of eight bytes. The + names are in no particular order.</p> + </td> + </tr> + + <tr> + <td><p>Values</p></td> + <td> + <p>The list of values in the same order as the names. The values + are packed (no inter-value padding) and the size of each value is + determined by the parent type.</p> + </td> + </tr> + + </table> +</div> + +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Enumeration Property Description for Datatype + Version 3</caption> + + <tr> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + </tr> + + <tr> + <td colspan="4"><br />Base Type<br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Names<br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Values<br /> + <br /></td> + </tr> + + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Base Type</p></td> + <td> + <p>Each enumeration type is based on some parent type, usually + an integer. The information for that parent type is described + recursively by this field.</p> + </td> + </tr> + + <tr> + <td><p>Names</p></td> + <td> + <p> + The name for each name/value pair. Each name is stored as a null + terminated ASCII string, <em>not</em> padded to a multiple of eight + bytes. The names are in no particular order. + </p> + </td> + </tr> + + <tr> + <td><p>Values</p></td> + <td> + <p>The list of values in the same order as the names. The values + are packed (no inter-value padding) and the size of each value is + determined by the parent type.</p> + </td> + </tr> + + </table> +</div> + + + +<br /> +<p>Class specific information for Variable-Length (Class 9):</p> + +<div align="center"> + <table class="desc"> + <caption>Variable-Length Bit Field Description</caption> + + <tr> + <th width="10%">Bits</th> + <th>Meaning</th> + </tr> + + <tr> + <td><p>0-3</p></td> + <td><p> + <b>Type.</b> This four-bit value contains the type of + variable-length datatype described. The values defined are: + + </p> + <table class="list"> + <tr> + <th width="20%" align="center">Value</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>Sequence: A variable-length sequence of any datatype. + Variable-length sequences do not have padding or character set + information.</td> + </tr> + + <tr> + <td align="center"><code>1</code></td> + <td>String: A variable-length sequence of characters. + Variable-length strings have padding and character set + information.</td> + </tr> + + <tr> + <td align="center"><code>2-15</code></td> + <td>Reserved</td> + </tr> + </table> + <p></p></td> + </tr> + + <tr> + <td><p>4-7</p></td> + <td><p> + <b>Padding type.</b> (variable-length string only) This four-bit + value determines the type of padding used for variable-length + strings. The values are the same as for the string padding type, as + follows: + </p> + <table class="list"> + <tr> + <th width="20%" align="center">Value</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>Null terminate: A zero byte marks the end of a string and + is guaranteed to be present after converting a long string to a + short string. When converting a short string to a long string, + the value is padded with additional null characters as necessary. + </td> + </tr> + + <tr> + <td align="center"><code>1</code></td> + <td>Null pad: Null characters are added to the end of the + value during conversion from a short string to a longer string. + Conversion from a long string to a shorter string simply + truncates the value.</td> + </tr> + + <tr> + <td align="center"><code>2</code></td> + <td>Space pad: Space characters are added to the end of the + value during conversion from a short string to a longer string. + Conversion from a long string to a shorter string simply + truncates the value. This is the Fortran representation of the + string.</td> + </tr> + + <tr> + <td align="center"><code>3-15</code></td> + <td>Reserved</td> + </tr> + </table> + <p></p> + + <p>This value is set to zero for variable-length sequences.</p></td> + </tr> + + <tr> + <td><p>8-11</p></td> + <td><p> + <b>Character Set.</b> (variable-length string only) This four-bit + value specifies the character set to be used for encoding the + string: + </p> + <table class="list"> + <tr> + <th width="20%" align="center">Value</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>ASCII character set encoding</td> + </tr> + + <tr> + <td align="center"><code>1</code></td> + <td>UTF-8 character set encoding</td> + </tr> + + <tr> + <td align="center"><code>2-15</code></td> + <td>Reserved</td> + </tr> + </table> + <p></p> + + <p>This value is set to zero for variable-length sequences.</p></td> + </tr> + + <tr> + <td><p>12-23</p></td> + <td><p>Reserved (zero).</p></td> + </tr> + </table> +</div> + +<br /> +<br /> +<div align="center"> + <table class="format"> + <caption>Variable-Length Property Description</caption> + + <tr> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + </tr> + + <tr> + <td colspan="4"><br />Base Type<br /> + <br /></td> + </tr> + + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="10%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Base Type</p></td> + <td> + <p>Each variable-length type is based on some parent type. The + information for that parent type is described recursively by this + field.</p> + </td> + </tr> + + </table> +</div> + + +<br /> +<p>Class specific information for Array (Class 10):</p> + +<p>There are no bit fields defined for the array class.</p> + +<p>Note that the dimension information defined in the property for + this datatype class is independent of dataspace information for a + dataset. The dimension information here describes the dimensionality of + the information within a data element (or a component of an element, if + the array datatype is nested within another datatype) and the dataspace + for a dataset describes the size and locations of the elements in a + dataset.</p> + + +<div align="center"> + <table class="format"> + <caption>Array Property Description for Datatype Version 2</caption> + + <tr> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + </tr> + + <tr> + <td>Dimensionality</td> + <td colspan="3">Reserved (zero)</td> + </tr> + + <tr> + <td colspan="4">Dimension #1 Size</td> + </tr> + <tr> + <td colspan="4">.<br />.<br />.<br /></td> + </tr> + <tr> + <td colspan="4">Dimension #n Size</td> + </tr> + + <tr> + <td colspan="4">Permutation Index #1</td> + </tr> + <tr> + <td colspan="4">.<br />.<br />.<br /></td> + </tr> + <tr> + <td colspan="4">Permutation Index #n</td> + </tr> + + <tr> + <td colspan="4"><br />Base Type<br /> + <br /></td> + </tr> + + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Dimensionality</p></td> + <td> + <p>This value is the number of dimensions that the array has.</p> + </td> + </tr> + + <tr> + <td><p>Dimension #n Size</p></td> + <td> + <p>This value is the size of the dimension of the array as + stored in the file. The first dimension stored in the list of + dimensions is the slowest changing dimension and the last dimension + stored is the fastest changing dimension.</p> + </td> + </tr> + + <tr> + <td><p>Permutation Index #n</p></td> + <td> + <p>This value is the index permutation used to map each + dimension from the canonical representation to an alternate axis + for each dimension. Currently, dimension permutations are not + supported, and these indices should be set to the index position + minus one. In other words, the first dimension should be set to 0, + the second dimension should be set to 1, and so on.</p> + </td> + </tr> + + <tr> + <td><p>Base Type</p></td> + <td> + <p>Each array type is based on some parent type. The information + for that parent type is described recursively by this field.</p> + </td> + </tr> + + </table> +</div> + +<br /> +<div align="center"> + <table class="format"> + <caption>Array Property Description for Datatype Version 3</caption> + + <tr> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + <th width="25%">Byte</th> + </tr> + + <tr> + <td>Dimensionality</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + + <tr> + <td colspan="4">Dimension #1 Size</td> + </tr> + <tr> + <td colspan="4">.<br />.<br />.<br /></td> + </tr> + <tr> + <td colspan="4">Dimension #n Size</td> + </tr> + + <tr> + <td colspan="4"><br />Base Type<br /> + <br /></td> + </tr> + + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Dimensionality</p></td> + <td> + <p>This value is the number of dimensions that the array has.</p> + </td> + </tr> + + <tr> + <td><p>Dimension #n Size</p></td> + <td> + <p>This value is the size of the dimension of the array as + stored in the file. The first dimension stored in the list of + dimensions is the slowest changing dimension and the last dimension + stored is the fastest changing dimension.</p> + </td> + </tr> + + <tr> + <td><p>Base Type</p></td> + <td> + <p>Each array type is based on some parent type. The information + for that parent type is described recursively by this field.</p> + </td> + </tr> + + </table> +</div> + + + +<br /> +<h4> + <a name="OldFillValueMessage">IV.A.2.e. The Data Storage - Fill + Value (Old) Message</a> +</h4> + +<!-- start msgdesc table --> +<center> <table class="msgdesc"> - <tr><td colspan="2"><b>Header Message Name:</b> Fill Value - (old)</td></tr> - <tr><td colspan="2"><b>Header Message Type:</b> 0x0004</td></tr> - <tr><td colspan="2"><b>Length:</b> Varies</td></tr> - <tr><td colspan="2"><b>Status:</b> Optional; may not be - repeated.</td></tr> - <tr><td><b>Description:</b></td> - <td><p>The fill value message stores a single data value which - is returned to the application when an uninitialized data element - is read from a dataset. The fill value is interpreted with the - same datatype as the dataset. If no fill value message is present - then a fill value of all zero bytes is assumed.</p> - <p>This fill value message is deprecated in favor of the - “new” fill value message (Message Type 0x0005) and - is only written to the file for forward compatibility with - versions of the HDF5 Library before the 1.6.0 version. - Additionally, it only appears for datasets with a user-defined - fill value (as opposed to the library default fill value or an - explicitly set “undefined” fill value).</p> - </td></tr> - <tr><td colspan="2"><b>Format of Data:</b> See the tables - below.</td></tr> - </table></center> - <!-- end msgdesc table --> - - <div align="center"> - <table class="format"> - <caption> - Fill Value Message (Old) - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td colspan="4">Size</td> - </tr> - - <tr> - <td colspan="4"><br />Fill Value <em>(optional, variable size)</em><br /><br /></td> - </tr> - </table> - </div> + <tr> + <td colspan="2"><b>Header Message Name:</b> Fill Value (old)</td> + </tr> + <tr> + <td colspan="2"><b>Header Message Type:</b> 0x0004</td> + </tr> + <tr> + <td colspan="2"><b>Length:</b> Varies</td> + </tr> + <tr> + <td colspan="2"><b>Status:</b> Optional; may not be repeated.</td> + </tr> + <tr> + <td><b>Description:</b></td> + <td><p>The fill value message stores a single data value + which is returned to the application when an uninitialized data + element is read from a dataset. The fill value is interpreted with + the same datatype as the dataset. If no fill value message is + present then a fill value of all zero bytes is assumed.</p> + <p>This fill value message is deprecated in favor of the + “new” fill value message (Message Type 0x0005) and is + only written to the file for forward compatibility with versions of + the HDF5 Library before the 1.6.0 version. Additionally, it only + appears for datasets with a user-defined fill value (as opposed to + the library default fill value or an explicitly set + “undefined” fill value).</p></td> + </tr> + <tr> + <td colspan="2"><b>Format of Data:</b> See the tables below.</td> + </tr> + </table> +</center> +<!-- end msgdesc table --> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Size</p></td> - <td> - <p>This is the size of the Fill Value field in bytes. - </p> - </td> - </tr> - - <tr> - <td><p>Fill Value</p></td> - <td> - <p>The fill value. The bytes of the fill value are interpreted - using the same datatype as for the dataset. - </p> - </td> - </tr> - </table> - </div> +<div align="center"> + <table class="format"> + <caption>Fill Value Message (Old)</caption> + + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + <tr> + <td colspan="4">Size</td> + </tr> + + <tr> + <td colspan="4"><br />Fill Value <em>(optional, variable + size)</em><br /> + <br /></td> + </tr> + </table> +</div> <br /> -<h4><a name="FillValueMessage">IV.A.2.f. The Data Storage - -Fill Value Message</a></h4> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> - <!-- start msgdesc table --> - <center> + <tr> + <td><p>Size</p></td> + <td> + <p>This is the size of the Fill Value field in bytes.</p> + </td> + </tr> + + <tr> + <td><p>Fill Value</p></td> + <td> + <p>The fill value. The bytes of the fill value are interpreted + using the same datatype as for the dataset.</p> + </td> + </tr> + </table> +</div> + + +<br /> +<h4> + <a name="FillValueMessage">IV.A.2.f. The Data Storage - Fill Value + Message</a> +</h4> + +<!-- start msgdesc table --> +<center> <table class="msgdesc"> - <tr><td colspan="2"><b>Header Message Name:</b> Fill - Value</td></tr> - <tr><td colspan="2"><b>Header Message Type:</b> 0x0005</td></tr> - <tr><td colspan="2"><b>Length:</b> Varies</td></tr> - <tr><td colspan="2"><b>Status:</b> Required for dataset objects; - may not be repeated.</td></tr> - <tr><td><b>Description:</b></td> - <td>The fill value message stores a single data value which is - returned to the application when an uninitialized data element - is read from a dataset. The fill value is interpreted with the - same datatype as the dataset.</td></tr> - <tr><td colspan="2"><b>Format of Data:</b> See the tables - below.</td></tr> - </table></center> - <!-- end msgdesc table --> - - <div align="center"> - <table class="format"> - <caption> - Fill Value Message - Versions 1 & 2 - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td>Version</td> - <td>Space Allocation Time</td> - <td>Fill Value Write Time</td> - <td>Fill Value Defined</td> - </tr> - - <tr> - <td colspan="4">Size <em>(optional)</em></td> - </tr> - - <tr> - <td colspan="4"><br />Fill Value <em>(optional, variable size)</em><br /><br /></td> - </tr> - </table> - </div> + <tr> + <td colspan="2"><b>Header Message Name:</b> Fill Value</td> + </tr> + <tr> + <td colspan="2"><b>Header Message Type:</b> 0x0005</td> + </tr> + <tr> + <td colspan="2"><b>Length:</b> Varies</td> + </tr> + <tr> + <td colspan="2"><b>Status:</b> Required for dataset objects; may + not be repeated.</td> + </tr> + <tr> + <td><b>Description:</b></td> + <td>The fill value message stores a single data value which is + returned to the application when an uninitialized data element is + read from a dataset. The fill value is interpreted with the same + datatype as the dataset.</td> + </tr> + <tr> + <td colspan="2"><b>Format of Data:</b> See the tables below.</td> + </tr> + </table> +</center> +<!-- end msgdesc table --> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version</p></td> - <td> - <p>The version number information is used for changes in the - format of the fill value message and is described here: +<div align="center"> + <table class="format"> + <caption>Fill Value Message - Versions 1 & 2</caption> + + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr> + <td>Version</td> + <td>Space Allocation Time</td> + <td>Fill Value Write Time</td> + <td>Fill Value Defined</td> + </tr> + + <tr> + <td colspan="4">Size <em>(optional)</em></td> + </tr> + + <tr> + <td colspan="4"><br />Fill Value <em>(optional, variable + size)</em><br /> + <br /></td> + </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Version</p></td> + <td> + <p>The version number information is used for changes in the + format of the fill value message and is described here:</p> <table class="list"> <tr> - <th width="20%" align="center">Version</th> - <th width="80%" align="left">Description</th> + <th width="20%" align="center">Version</th> + <th width="80%" align="left">Description</th> </tr> <tr> - <td align="center"><code>0</code></td> - <td>Never used - </td> + <td align="center"><code>0</code></td> + <td>Never used</td> </tr> <tr> - <td align="center"><code>1</code></td> - <td>Initial version of this message. - </td> + <td align="center"><code>1</code></td> + <td>Initial version of this message.</td> </tr> <tr> - <td align="center"><code>2</code></td> - <td>In this version, the Size and Fill Value fields are - only present if the Fill Value Defined field is set - to 1. - </td> + <td align="center"><code>2</code></td> + <td>In this version, the Size and Fill Value fields are only + present if the Fill Value Defined field is set to 1.</td> </tr> <tr> - <td align="center"><code>3</code></td> - <td>This version packs the other fields in the message - more efficiently than version 2. - </td> + <td align="center"><code>3</code></td> + <td>This version packs the other fields in the message more + efficiently than version 2.</td> </tr> - </table></p> - </p> - </td> - </tr> + </table> + <p></p> + <p></p> + </td> + </tr> - <tr> - <td><p>Space Allocation Time</p></td> - <td> - <p>When the storage space for the dataset’s raw data will be - allocated. The allowed values are: + <tr> + <td><p>Space Allocation Time</p></td> + <td> + <p>When the storage space for the dataset’s raw data will + be allocated. The allowed values are:</p> <table class="list"> <tr> - <th width="20%" align="center">Value</th> - <th width="80%" align="left">Description</th> + <th width="20%" align="center">Value</th> + <th width="80%" align="left">Description</th> </tr> <tr> - <td align="center"><code>0</code></td> - <td>Not used. - </td> + <td align="center"><code>0</code></td> + <td>Not used.</td> </tr> <tr> - <td align="center"><code>1</code></td> - <td>Early allocation. Storage space for the entire dataset - should be allocated in the file when the dataset is - created. - </td> + <td align="center"><code>1</code></td> + <td>Early allocation. Storage space for the entire dataset + should be allocated in the file when the dataset is created.</td> </tr> <tr> - <td align="center"><code>2</code></td> - <td>Late allocation. Storage space for the entire dataset - should not be allocated until the dataset is written - to. - </td> + <td align="center"><code>2</code></td> + <td>Late allocation. Storage space for the entire dataset + should not be allocated until the dataset is written to.</td> </tr> <tr> - <td align="center"><code>3</code></td> - <td>Incremental allocation. Storage space for the - dataset should not be allocated until the portion - of the dataset is written to. This is currently - used in conjunction with chunked data storage for - datasets. - </td> + <td align="center"><code>3</code></td> + <td>Incremental allocation. Storage space for the dataset + should not be allocated until the portion of the dataset is + written to. This is currently used in conjunction with chunked + data storage for datasets.</td> </tr> - </table></p> + </table> + <p></p> - </td> - </tr> + </td> + </tr> - <tr> - <td><p>Fill Value Write Time</p></td> - <td> - <p>At the time that storage space for the dataset’s raw data is - allocated, this value indicates whether the fill value should - be written to the raw data storage elements. The allowed values - are: + <tr> + <td><p>Fill Value Write Time</p></td> + <td> + <p>At the time that storage space for the dataset’s raw + data is allocated, this value indicates whether the fill value + should be written to the raw data storage elements. The allowed + values are:</p> <table class="list"> <tr> - <th width="20%" align="center">Value</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>On allocation. The fill value is always written to - the raw data storage when the storage space is allocated. - </td> - </tr> - <tr> - <td align="center"><code>1</code></td> - <td>Never. The fill value should never be written to - the raw data storage. - </td> - </tr> - <tr> - <td align="center"><code>2</code></td> - <td>Fill value written if set by user. The fill value - will be written to the raw data storage when the storage - space is allocated only if the user explicitly set - the fill value. If the fill value is the library - default or is undefined, it will not be written to - the raw data storage. - </td> - </tr> - </table></p> - - </td> - </tr> - - <tr> - <td><p>Fill Value Defined</p></td> - <td> - <p>This value indicates if a fill value is defined for this - dataset. If this value is 0, the fill value is undefined. - If this value is 1, a fill value is defined for this dataset. - For version 2 or later of the fill value message, this value - controls the presence of the Size and Fill Value fields. - </p> - </td> - </tr> - - <tr> - <td><p>Size</p></td> - <td> - <p>This is the size of the Fill Value field in bytes. This field - is not present if the Version field is greater than 1, - and the Fill Value Defined field is set to 0. - </p> - </td> - </tr> - - <tr> - <td><p>Fill Value</p></td> - <td> - <p>The fill value. The bytes of the fill value are interpreted - using the same datatype as for the dataset. This field is - not present if the Version field is greater than 1, - and the Fill Value Defined field is set to 0. - </p> - </td> - </tr> - </table> - </div> + <th width="20%" align="center">Value</th> + <th width="80%" align="left">Description</th> + </tr> - <br /> - <div align="center"> - <table class="format"> - <caption> - Fill Value Message - Version 3 - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td>Version</td> - <td>Flags</td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> - - <tr> - <td colspan="4">Size <em>(optional)</em></td> - </tr> - - <tr> - <td colspan="4"><br />Fill Value <em>(optional, variable size)</em><br /><br /></td> - </tr> - </table> - </div> + <tr> + <td align="center"><code>0</code></td> + <td>On allocation. The fill value is always written to the + raw data storage when the storage space is allocated.</td> + </tr> + <tr> + <td align="center"><code>1</code></td> + <td>Never. The fill value should never be written to the raw + data storage.</td> + </tr> + <tr> + <td align="center"><code>2</code></td> + <td>Fill value written if set by user. The fill value will be + written to the raw data storage when the storage space is + allocated only if the user explicitly set the fill value. If the + fill value is the library default or is undefined, it will not be + written to the raw data storage.</td> + </tr> + </table> + <p></p> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version</p></td> - <td> - <p>The version number information is used for changes in the - format of the fill value message and is described here: + </td> + </tr> + + <tr> + <td><p>Fill Value Defined</p></td> + <td> + <p>This value indicates if a fill value is defined for this + dataset. If this value is 0, the fill value is undefined. If this + value is 1, a fill value is defined for this dataset. For version 2 + or later of the fill value message, this value controls the + presence of the Size and Fill Value fields.</p> + </td> + </tr> + + <tr> + <td><p>Size</p></td> + <td> + <p>This is the size of the Fill Value field in bytes. This field + is not present if the Version field is greater than 1, and the Fill + Value Defined field is set to 0.</p> + </td> + </tr> + + <tr> + <td><p>Fill Value</p></td> + <td> + <p>The fill value. The bytes of the fill value are interpreted + using the same datatype as for the dataset. This field is not + present if the Version field is greater than 1, and the Fill Value + Defined field is set to 0.</p> + </td> + </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="format"> + <caption>Fill Value Message - Version 3</caption> + + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr> + <td>Version</td> + <td>Flags</td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + + <tr> + <td colspan="4">Size <em>(optional)</em></td> + </tr> + + <tr> + <td colspan="4"><br />Fill Value <em>(optional, variable + size)</em><br /> + <br /></td> + </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Version</p></td> + <td> + <p>The version number information is used for changes in the + format of the fill value message and is described here:</p> <table class="list"> <tr> - <th width="20%" align="center">Version</th> - <th width="80%" align="left">Description</th> + <th width="20%" align="center">Version</th> + <th width="80%" align="left">Description</th> </tr> <tr> - <td align="center"><code>0</code></td> - <td>Never used - </td> + <td align="center"><code>0</code></td> + <td>Never used</td> </tr> <tr> - <td align="center"><code>1</code></td> - <td>Initial version of this message. - </td> + <td align="center"><code>1</code></td> + <td>Initial version of this message.</td> </tr> <tr> - <td align="center"><code>2</code></td> - <td>In this version, the Size and Fill Value fields are - only present if the Fill Value Defined field is set - to 1. - </td> + <td align="center"><code>2</code></td> + <td>In this version, the Size and Fill Value fields are only + present if the Fill Value Defined field is set to 1.</td> </tr> <tr> - <td align="center"><code>3</code></td> - <td>This version packs the other fields in the message - more efficiently than version 2. - </td> + <td align="center"><code>3</code></td> + <td>This version packs the other fields in the message more + efficiently than version 2.</td> </tr> - </table></p> + </table> + <p></p> - </td> - </tr> + </td> + </tr> - <tr> - <td><p>Flags</p></td> - <td> - <p>When the storage space for the dataset’s raw data will be - allocated. The allowed values are: + <tr> + <td><p>Flags</p></td> + <td> + <p>When the storage space for the dataset’s raw data will + be allocated. The allowed values are:</p> <table class="list"> <tr> - <th width="20%" align="center">Bits</th> - <th width="80%" align="left">Description</th> + <th width="20%" align="center">Bits</th> + <th width="80%" align="left">Description</th> </tr> <tr> - <td align="center"><code>0-1</code></td> - <td>Space Allocation Time, with the same - values as versions 1 and 2 of the message. - </td> + <td align="center"><code>0-1</code></td> + <td>Space Allocation Time, with the same values as versions 1 + and 2 of the message.</td> </tr> <tr> - <td align="center"><code>2-3</code></td> - <td>Fill Value Write Time, with the same - values as versions 1 and 2 of the message. - </td> + <td align="center"><code>2-3</code></td> + <td>Fill Value Write Time, with the same values as versions 1 + and 2 of the message.</td> </tr> <tr> - <td align="center"><code>4</code></td> - <td>Fill Value Undefined, indicating that the fill - value has been marked as “undefined” for this dataset. - Bits 4 and 5 cannot both be set. - </td> + <td align="center"><code>4</code></td> + <td>Fill Value Undefined, indicating that the fill value has + been marked as “undefined” for this dataset. Bits 4 + and 5 cannot both be set.</td> </tr> <tr> - <td align="center"><code>5</code></td> - <td>Fill Value Defined, with the same values as - versions 1 and 2 of the message. - Bits 4 and 5 cannot both be set. - </td> + <td align="center"><code>5</code></td> + <td>Fill Value Defined, with the same values as versions 1 + and 2 of the message. Bits 4 and 5 cannot both be set.</td> </tr> <tr> - <td align="center"><code>6-7</code></td> - <td>Reserved (zero). - </td> + <td align="center"><code>6-7</code></td> + <td>Reserved (zero).</td> </tr> - </table></p> + </table> + <p></p> - </td> - </tr> + </td> + </tr> - <tr> - <td><p>Size</p></td> - <td> - <p>This is the size of the Fill Value field in bytes. This field - is not present if the Version field is greater than 1, - and the Fill Value Defined flag is set to 0. - </p> - </td> - </tr> + <tr> + <td><p>Size</p></td> + <td> + <p>This is the size of the Fill Value field in bytes. This field + is not present if the Version field is greater than 1, and the Fill + Value Defined flag is set to 0.</p> + </td> + </tr> - <tr> - <td><p>Fill Value</p></td> - <td> - <p>The fill value. The bytes of the fill value are interpreted - using the same datatype as for the dataset. This field is - not present if the Version field is greater than 1, - and the Fill Value Defined flag is set to 0. - </p> - </td> - </tr> - </table> - </div> + <tr> + <td><p>Fill Value</p></td> + <td> + <p>The fill value. The bytes of the fill value are interpreted + using the same datatype as for the dataset. This field is not + present if the Version field is greater than 1, and the Fill Value + Defined flag is set to 0.</p> + </td> + </tr> + </table> +</div> <br /> -<h4><a name="LinkMessage">IV.A.2.g. The Link Message</a></h4> +<h4> + <a name="LinkMessage">IV.A.2.g. The Link Message</a> +</h4> - <!-- start msgdesc table --> - <center> +<!-- start msgdesc table --> +<center> <table class="msgdesc"> - <tr><td colspan="2"><b>Header Message Name:</b> Link</td></tr> - <tr><td colspan="2"><b>Header Message Type:</b> 0x0006</td></tr> - <tr><td colspan="2"><b>Length:</b> Varies </td></tr> - <tr><td colspan="2"><b>Status:</b> Optional; may be - repeated. </td></tr> - <tr><td><b>Description:</b></td> - <td><p>This message encodes the information for a link in a - group’s object header, when the group is storing its links - “compactly”, or in the group’s fractal heap, - when the group is storing its links “densely”.</p> - <p>A group is storing its links compactly when the fractal heap - address in the <em><a href="#LinkInfoMessage">Link Info - Message</a></em> is set to the “undefined address” - value.</p></td></tr> - <tr><td colspan="2"><b>Format of Data:</b> See the tables - below.</td></tr> - </table></center> - <!-- end msgdesc table --> - - <div align="center"> - <table class="format"> - <caption> - Link Message - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td>Version</td> - <td>Flags</td> - <td>Link type <em>(optional)</em></td> - <td bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> - <tr> - <td colspan="4"><br />Creation Order <em>(8 bytes, optional)</em><br /><br /></td> - </tr> - <tr> - <td>Link Name Character Set <em>(optional)</em></td> - <td>Length of Link Name (variable size)</td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> - <tr> - <td colspan="4">Link Name (variable size)</td> - </tr> - <tr> - <td colspan="4"><br />Link Information (variable size)<br /><br /></td> - </tr> - </table> - </div> + <tr> + <td colspan="2"><b>Header Message Name:</b> Link</td> + </tr> + <tr> + <td colspan="2"><b>Header Message Type:</b> 0x0006</td> + </tr> + <tr> + <td colspan="2"><b>Length:</b> Varies</td> + </tr> + <tr> + <td colspan="2"><b>Status:</b> Optional; may be repeated.</td> + </tr> + <tr> + <td><b>Description:</b></td> + <td><p>This message encodes the information for a link in a + group’s object header, when the group is storing its links + “compactly”, or in the group’s fractal heap, when + the group is storing its links “densely”.</p> + <p> + A group is storing its links compactly when the fractal heap + address in the <em><a href="#LinkInfoMessage">Link Info + Message</a></em> is set to the “undefined address” value. + </p></td> + </tr> + <tr> + <td colspan="2"><b>Format of Data:</b> See the tables below.</td> + </tr> + </table> +</center> +<!-- end msgdesc table --> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version</p></td> - <td><p>The version number for this message. This document describes version 1.</p> - </td> - </tr> - - <tr> - <td><p>Flags</p></td> - <td><p>This field contains information about the link and controls - the presence of other fields below. +<div align="center"> + <table class="format"> + <caption>Link Message</caption> + + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr> + <td>Version</td> + <td>Flags</td> + <td>Link type <em>(optional)</em></td> + <td bgcolor="#DDDDDD"><em>This space inserted only to align + table nicely</em></td> + </tr> + <tr> + <td colspan="4"><br />Creation Order <em>(8 bytes, + optional)</em><br /> + <br /></td> + </tr> + <tr> + <td>Link Name Character Set <em>(optional)</em></td> + <td>Length of Link Name (variable size)</td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + <tr> + <td colspan="4">Link Name (variable size)</td> + </tr> + <tr> + <td colspan="4"><br />Link Information (variable size)<br /> + <br /></td> + </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Version</p></td> + <td><p>The version number for this message. This document + describes version 1.</p></td> + </tr> + + <tr> + <td><p>Flags</p></td> + <td><p>This field contains information about the link and + controls the presence of other fields below.</p> <table class="list"> <tr> - <th width="20%" align="center">Bits</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0-1</code></td> - <td>Determines the size of the <em>Length of Link Name</em> - field. - <table class="list"> - <tr> - <th width="20%" align="center">Value</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>The size of the <em>Length of Link Name</em> - field is 1 byte. - </td> - </tr> - <tr> - <td align="center"><code>1</code></td> - <td>The size of the <em>Length of Link Name</em> - field is 2 bytes. - </td> - </tr> - <tr> - <td align="center"><code>2</code></td> - <td>The size of the <em>Length of Link Name</em> - field is 4 bytes. - </td> - </tr> - <tr> - <td align="center"><code>3</code></td> - <td>The size of the <em>Length of Link Name</em> - field is 8 bytes. - </td> - </tr> - </table> - </td> - </tr> - <tr> - <td align="center"><code>2</code></td> - <td>Creation Order Field Present: if set, the <em>Creation - Order</em> field is present. If not set, creation order - information is not stored for links in this group. - </td> - </tr> - <tr> - <td align="center"><code>3</code></td> - <td>Link Type Field Present: if set, the link is not - a hard link and the <em>Link Type</em> field is present. - If not set, the link is a hard link. - </td> - </tr> - <tr> - <td align="center"><code>4</code></td> - <td>Link Name Character Set Field Present: if set, the - link name is not represented with the ASCII character - set and the <em>Link Name Character Set</em> field is - present. If not set, the link name is represented with - the ASCII character set. - </td> - </tr> - <tr> - <td align="center"><code>5-7</code></td> - <td>Reserved (zero). - </td> - </tr> - </table></p> - - </td> - </tr> - - <tr> - <td><p>Link type</p></td> - <td><p>This is the link class type and can be one of the following - values: + <th width="20%" align="center">Bits</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0-1</code></td> + <td>Determines the size of the <em>Length of Link Name</em> + field. + <table class="list"> + <tr> + <th width="20%" align="center">Value</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>The size of the <em>Length of Link Name</em> field is + 1 byte. + </td> + </tr> + <tr> + <td align="center"><code>1</code></td> + <td>The size of the <em>Length of Link Name</em> field is + 2 bytes. + </td> + </tr> + <tr> + <td align="center"><code>2</code></td> + <td>The size of the <em>Length of Link Name</em> field is + 4 bytes. + </td> + </tr> + <tr> + <td align="center"><code>3</code></td> + <td>The size of the <em>Length of Link Name</em> field is + 8 bytes. + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td align="center"><code>2</code></td> + <td>Creation Order Field Present: if set, the <em>Creation + Order</em> field is present. If not set, creation order information + is not stored for links in this group. + </td> + </tr> + <tr> + <td align="center"><code>3</code></td> + <td>Link Type Field Present: if set, the link is not a hard + link and the <em>Link Type</em> field is present. If not set, the + link is a hard link. + </td> + </tr> + <tr> + <td align="center"><code>4</code></td> + <td>Link Name Character Set Field Present: if set, the link + name is not represented with the ASCII character set and the <em>Link + Name Character Set</em> field is present. If not set, the link name + is represented with the ASCII character set. + </td> + </tr> + <tr> + <td align="center"><code>5-7</code></td> + <td>Reserved (zero).</td> + </tr> + </table> + <p></p></td> + </tr> + + <tr> + <td><p>Link type</p></td> + <td><p>This is the link class type and can be one of the + following values:</p> <table class="list"> <tr> - <th width="20%" align="center">Value</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>A hard link (should never be stored in the file) - </td> - </tr> - <tr> - <td align="center"><code>1</code></td> - <td>A soft link. - </td> - </tr> - <tr> - <td align="center"><code>2-63</code></td> - <td>Reserved for future HDF5 internal use. - </td> - </tr> - <tr> - <td align="center"><code>64</code></td> - <td>An external link. - </td> - </tr> - <tr> - <td align="center"><code>65-255</code></td> - <td>Reserved, but available for user-defined link types. - </td> - </tr> - </table></p> - - <p>This field is present if bit 3 of <em>Flags</em> is set.</p> - </td> - </tr> - - <tr> - <td><p>Creation Order</p></td> - <td><p>This 64-bit value is an index of the link’s creation time within - the group. Values start at 0 when the group is created an increment - by one for each link added to the group. Removing a link from a - group does not change existing links’ creation order field. - </p> - <p>This field is present if bit 2 of <em>Flags</em> is set.</p> - </td> - </tr> - - <tr> - <td><p>Link Name Character Set</p></td> - <td><p>This is the character set for encoding the link’s name: - <table class="list"> - <tr> - <th width="20%" align="center">Value</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>ASCII character set encoding (this should never be stored - in the file) - </td> - </tr> - - <tr> - <td align="center"><code>1</code></td> - <td>UTF-8 character set encoding - </td> - </tr> - </table></p> - - <p>This field is present if bit 4 of <em>Flags</em> is set.</p> - </td> - </tr> - - <tr> - <td><p>Length of link name</p></td> - <td><p>This is the length of the link’s name. The size of this field - depends on bits 0 and 1 of <em>Flags</em>.</p> - </td> - </tr> - - <tr> - <td><p>Link name</p></td> - <td><p>This is the name of the link, non-NULL terminated.</p> - </td> - </tr> - - <tr> - <td><p>Link information</p></td> - <td><p>The format of this field depends on the <em>link type</em>.</p> - <p>For <b>hard</b> links, the field is formatted as follows: - - <table class="list"> - <tr> - <td width="20%"><i>Size of Offsets</i> bytes:</td> - <td width="80%">The address of the object header for the object that the - link points to. - </td> - </tr> - </table> - </p> - - <p> - For <b>soft</b> links, the field is formatted as follows: - - <table class="list"> - <tr> - <td width="20%">Bytes 1-2:</td> - <td width="80%">Length of soft link value.</td> - </tr> - <tr> - <td><em>Length of soft link value</em> bytes:</td> - <td>A non-NULL-terminated string storing the value of the - soft link. - </td> - </tr> - </table> - </p> - - <p> - For <b>external</b> links, the field is formatted as follows: - - <table class="list"> - <tr> - <td width="20%">Bytes 1-2:</td> - <td width="80%">Length of external link value.</td> - </tr> - <tr> - <td><em>Length of external link value</em> bytes:</td> - <td>The first byte contains the version number in the - upper 4 bits and flags in the lower 4 bits for the external - link. Both version and flags are defined to be zero in - this document. The remaining bytes consist of two - NULL-terminated strings, with no padding between them. - The first string is the name of the HDF5 file containing - the object linked to and the second string is the full path - to the object linked to, within the HDF5 file’s - group hierarchy. - </td> - </tr> - </table> - </p> - - <p> - For <b>user-defined</b> links, the field is formatted as follows: - - <table class="list"> - <tr> - <td width="20%">Bytes 1-2:</td> - <td width="80%">Length of user-defined data.</td> - </tr> - <tr> - <td><em>Length of user-defined link value</em> bytes:</td> - <td>The data supplied for the user-defined link type.</td> - </tr> - </table> - </p> - - </td> + <th width="20%" align="center">Value</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>A hard link (should never be stored in the file)</td> + </tr> + <tr> + <td align="center"><code>1</code></td> + <td>A soft link.</td> + </tr> + <tr> + <td align="center"><code>2-63</code></td> + <td>Reserved for future HDF5 internal use.</td> + </tr> + <tr> + <td align="center"><code>64</code></td> + <td>An external link.</td> + </tr> + <tr> + <td align="center"><code>65-255</code></td> + <td>Reserved, but available for user-defined link types.</td> + </tr> + </table> + <p></p> + + <p> + This field is present if bit 3 of <em>Flags</em> is set. + </p></td> </tr> - </table> - </div> + + <tr> + <td><p>Creation Order</p></td> + <td><p>This 64-bit value is an index of the link’s + creation time within the group. Values start at 0 when the group is + created an increment by one for each link added to the group. + Removing a link from a group does not change existing links’ + creation order field.</p> + <p> + This field is present if bit 2 of <em>Flags</em> is set. + </p></td> + </tr> + + <tr> + <td><p>Link Name Character Set</p></td> + <td><p>This is the character set for encoding the + link’s name:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Value</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>ASCII character set encoding (this should never be stored + in the file)</td> + </tr> + + <tr> + <td align="center"><code>1</code></td> + <td>UTF-8 character set encoding</td> + </tr> + </table> + <p></p> + + <p> + This field is present if bit 4 of <em>Flags</em> is set. + </p></td> + </tr> + + <tr> + <td><p>Length of link name</p></td> + <td><p> + This is the length of the link’s name. The size of this field + depends on bits 0 and 1 of <em>Flags</em>. + </p></td> + </tr> + + <tr> + <td><p>Link name</p></td> + <td><p>This is the name of the link, non-NULL terminated.</p></td> + </tr> + + <tr> + <td><p>Link information</p></td> + <td><p> + The format of this field depends on the <em>link type</em>. + </p> + <p> + For <b>hard</b> links, the field is formatted as follows: + + </p> + <table class="list"> + <tr> + <td width="20%"><i>Size of Offsets</i> bytes:</td> + <td width="80%">The address of the object header for the + object that the link points to.</td> + </tr> + </table> + <p></p> + + <p> + For <b>soft</b> links, the field is formatted as follows: + + </p> + <table class="list"> + <tr> + <td width="20%">Bytes 1-2:</td> + <td width="80%">Length of soft link value.</td> + </tr> + <tr> + <td><em>Length of soft link value</em> bytes:</td> + <td>A non-NULL-terminated string storing the value of the + soft link.</td> + </tr> + </table> + <p></p> + + <p> + For <b>external</b> links, the field is formatted as follows: + + </p> + <table class="list"> + <tr> + <td width="20%">Bytes 1-2:</td> + <td width="80%">Length of external link value.</td> + </tr> + <tr> + <td><em>Length of external link value</em> bytes:</td> + <td>The first byte contains the version number in the upper 4 + bits and flags in the lower 4 bits for the external link. Both + version and flags are defined to be zero in this document. The + remaining bytes consist of two NULL-terminated strings, with no + padding between them. The first string is the name of the HDF5 + file containing the object linked to and the second string is the + full path to the object linked to, within the HDF5 file’s + group hierarchy.</td> + </tr> + </table> + <p></p> + + <p> + For <b>user-defined</b> links, the field is formatted as follows: + + </p> + <table class="list"> + <tr> + <td width="20%">Bytes 1-2:</td> + <td width="80%">Length of user-defined data.</td> + </tr> + <tr> + <td><em>Length of user-defined link value</em> bytes:</td> + <td>The data supplied for the user-defined link type.</td> + </tr> + </table> + <p></p></td> + </tr> + </table> +</div> <br /> -<h4><a name="ExternalFileListMessage">IV.A.2.h. The Data Storage - -External Data Files Message</a></h4> +<h4> + <a name="ExternalFileListMessage">IV.A.2.h. The Data Storage - + External Data Files Message</a> +</h4> - <!-- start msgdesc table --> - <center> +<!-- start msgdesc table --> +<center> <table class="msgdesc"> - <tr><td colspan="2"><b>Header Message Name:</b> External - Data Files</td></tr> - <tr><td colspan="2"><b>Header Message Type:</b> 0x0007</td></tr> - <tr><td colspan="2"><b>Length:</b> Varies</td></tr> - <tr><td colspan="2"><b>Status:</b> Optional; may not be - repeated.</td></tr> - <tr><td><b>Description:</b></td> - <td>The external data storage message indicates that the data - for an object is stored outside the HDF5 file. The filename of - the object is stored as a Universal Resource Location (URL) of - the actual filename containing the data. An external file list - record also contains the byte offset of the start of the data - within the file and the amount of space reserved in the file - for that data.</td></tr> - <tr><td colspan="2"><b>Format of Data:</b> See the tables - below.</td></tr> - </table></center> - <!-- end msgdesc table --> - - <div align="center"> - <table class="format"> - <caption> - External File List Message - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td>Version</td> - <td colspan="3">Reserved (zero)</td> - </tr> - - <tr> - <td colspan="2">Allocated Slots</td> - <td colspan="2">Used Slots</td> - </tr> - - <tr> - <td colspan="4"><br />Heap Address<sup>O</sup><br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Slot Definitions...<br /><br /></td> - </tr> - </table> + <tr> + <td colspan="2"><b>Header Message Name:</b> External Data Files</td> + </tr> + <tr> + <td colspan="2"><b>Header Message Type:</b> 0x0007</td> + </tr> + <tr> + <td colspan="2"><b>Length:</b> Varies</td> + </tr> + <tr> + <td colspan="2"><b>Status:</b> Optional; may not be repeated.</td> + </tr> + <tr> + <td><b>Description:</b></td> + <td>The external data storage message indicates that the data + for an object is stored outside the HDF5 file. The filename of the + object is stored as a Universal Resource Location (URL) of the + actual filename containing the data. An external file list record + also contains the byte offset of the start of the data within the + file and the amount of space reserved in the file for that data.</td> + </tr> + <tr> + <td colspan="2"><b>Format of Data:</b> See the tables below.</td> + </tr> + </table> +</center> +<!-- end msgdesc table --> + +<div align="center"> + <table class="format"> + <caption>External File List Message</caption> - <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> - </table> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> - </div> + <tr> + <td>Version</td> + <td colspan="3">Reserved (zero)</td> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version</p></td> - <td> - <p>The version number information is used for changes in the format of - External Data Storage Message and is described here: - <table class="list"> - <tr> - <th width="20%" align="center">Version</th> - <th width="80%" align="left">Description</th> - </tr> - <tr> - <td align="center"><code>0</code></td> - <td>Never used.</td> - </tr> - <tr> - <td align="center"><code>1</code></td> - <td>The current version used by the library.</td> - </tr> - </table></p> - - </td> - </tr> - - <tr> - <td><p>Allocated Slots</p></td> - <td> - <p>The total number of slots allocated in the message. Its value must be at least as - large as the value contained in the Used Slots field. (The current library simply - uses the number of Used Slots for this message)</p> - </td> - </tr> - - <tr> - <td><p>Used Slots</p></td> - <td> - <p>The number of initial slots which contains valid information.</p> - </td> - </tr> - - <tr> - <td><p>Heap Address</p></td> - <td> - <p>This is the address of a local heap which contains the names for the external - files (The local heap information can be found in Disk Format Level 1D in this - document). The name at offset zero in the heap is always the empty string.</p> - </td> - </tr> - - <tr> - <td><p>Slot Definitions</p></td> - <td> - <p>The slot definitions are stored in order according to the array addresses they - represent.</p> - </td> - </tr> - - </table> - </div> + <tr> + <td colspan="2">Allocated Slots</td> + <td colspan="2">Used Slots</td> + </tr> - <br /> - <div align="center"> - <table class="format"> - <caption> - External File List Slot - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td colspan="4"><br />Name Offset in Local Heap<sup>L</sup><br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Offset in External Data File<sup>L</sup><br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Data Size in External File<sup>L</sup><br /><br /></td> - </tr> - </table> + <tr> + <td colspan="4"><br />Heap Address<sup>O</sup><br /> + <br /></td> + </tr> - <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘L’ in the above table are of the size - specified in “Size of Lengths” field in the superblock.) - </td></tr> - </table> + <td colspan="4"><br />Slot Definitions...<br /> + <br /></td> + </tr> + </table> + + <table class="note"> + <tr> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> + </table> - </div> +</div> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Name Offset in Local Heap</p></td> - <td> - <p>The byte offset within the local name heap for the name - of the file. File names are stored as a URL which has a - protocol name, a host name, a port number, and a file - name: - <code><em>protocol</em>:<em>port</em>//<em>host</em>/<em>file</em></code>. - If the protocol is omitted then “file:” is assumed. If - the port number is omitted then a default port for that - protocol is used. If both the protocol and the port - number are omitted then the colon can also be omitted. If - the double slash and host name are omitted then - “localhost” is assumed. The file name is the only - mandatory part, and if the leading slash is missing then - it is relative to the application’s current working - directory (the use of relative names is not - recommended). - </p> - </td> - </tr> - - <tr> - <td><p>Offset in External Data File</p></td> - <td> - <p>This is the byte offset to the start of the data in the - specified file. For files that contain data for a single - dataset this will usually be zero.</p> - </td> - </tr> - - <tr> - <td><p>Data Size in External File</p></td> - <td> - <p>This is the total number of bytes reserved in the - specified file for raw data storage. For a file that - contains exactly one complete dataset which is not - extendable, the size will usually be the exact size of the - dataset. However, by making the size larger one allows - HDF5 to extend the dataset. The size can be set to a value - larger than the entire file since HDF5 will read zeroes - past the end of the file without failing.</p> - </td> - </tr> - </table> - </div> - - -<br /> -<h4><a name="LayoutMessage">IV.A.2.i. The Data Storage - Layout -Message</a></h4> - - <!-- start msgdesc table --> - <center> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Version</p></td> + <td> + <p>The version number information is used for changes in the + format of External Data Storage Message and is described here:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Version</th> + <th width="80%" align="left">Description</th> + </tr> + <tr> + <td align="center"><code>0</code></td> + <td>Never used.</td> + </tr> + <tr> + <td align="center"><code>1</code></td> + <td>The current version used by the library.</td> + </tr> + </table> + <p></p> + + </td> + </tr> + + <tr> + <td><p>Allocated Slots</p></td> + <td> + <p>The total number of slots allocated in the message. Its value + must be at least as large as the value contained in the Used Slots + field. (The current library simply uses the number of Used Slots + for this message)</p> + </td> + </tr> + + <tr> + <td><p>Used Slots</p></td> + <td> + <p>The number of initial slots which contains valid information.</p> + </td> + </tr> + + <tr> + <td><p>Heap Address</p></td> + <td> + <p>This is the address of a local heap which contains the names + for the external files (The local heap information can be found in + Disk Format Level 1D in this document). The name at offset zero in + the heap is always the empty string.</p> + </td> + </tr> + + <tr> + <td><p>Slot Definitions</p></td> + <td> + <p>The slot definitions are stored in order according to the + array addresses they represent.</p> + </td> + </tr> + + </table> +</div> + +<br /> +<div align="center"> + <table class="format"> + <caption>External File List Slot</caption> + + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr> + <td colspan="4"><br />Name Offset in Local Heap<sup>L</sup><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Offset in External Data File<sup>L</sup><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Data Size in External File<sup>L</sup><br /> + <br /></td> + </tr> + </table> + + <table class="note"> + <tr> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘L’ in the + above table are of the size specified in “Size of + Lengths” field in the superblock.)</td> + </tr> + </table> + +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Name Offset in Local Heap</p></td> + <td> + <p> + The byte offset within the local name heap for the name of the + file. File names are stored as a URL which has a protocol name, a + host name, a port number, and a file name: + <code> + <em>protocol</em>:<em>port</em>//<em>host</em>/<em>file</em> + </code> + . If the protocol is omitted then “file:” is assumed. + If the port number is omitted then a default port for that protocol + is used. If both the protocol and the port number are omitted then + the colon can also be omitted. If the double slash and host name + are omitted then “localhost” is assumed. The file name + is the only mandatory part, and if the leading slash is missing + then it is relative to the application’s current working + directory (the use of relative names is not recommended). + </p> + </td> + </tr> + + <tr> + <td><p>Offset in External Data File</p></td> + <td> + <p>This is the byte offset to the start of the data in the + specified file. For files that contain data for a single dataset + this will usually be zero.</p> + </td> + </tr> + + <tr> + <td><p>Data Size in External File</p></td> + <td> + <p>This is the total number of bytes reserved in the specified + file for raw data storage. For a file that contains exactly one + complete dataset which is not extendable, the size will usually be + the exact size of the dataset. However, by making the size larger + one allows HDF5 to extend the dataset. The size can be set to a + value larger than the entire file since HDF5 will read zeroes past + the end of the file without failing.</p> + </td> + </tr> + </table> +</div> + + +<br /> +<h4> + <a name="LayoutMessage">IV.A.2.i. The Data Storage - Layout Message</a> +</h4> + +<!-- start msgdesc table --> +<center> <table class="msgdesc"> - <tr><td colspan="2"><b>Header Message Name:</b> Data Storage - - Layout</td></tr> - <tr><td colspan="2"><b>Header Message Type:</b> 0x0008</td></tr> - <tr><td colspan="2"><b>Length:</b> Varies</td></tr> - <tr><td colspan="2"><b>Status:</b> Required for datasets; may not - be repeated.</td></tr> - <tr><td><b>Description:</b></td> - <td>Data layout describes how the elements of a multi-dimensional - array are stored in the HDF5 file. Three types of data layout - are supported: - <ol> - <li>Contiguous: The array is stored in one contiguous area of - the file. This layout requires that the size of the array be - constant: data manipulations such as chunking, compression, - checksums, or encryption are not permitted. The message stores - the total storage size of the array. The offset of an element - from the beginning of the storage area is computed as in a C - array.</li> - <li>Chunked: The array domain is regularly decomposed into - chunks, and each chunk is allocated and stored separately. This - layout supports arbitrary element traversals, compression, - encryption, and checksums. (these features are described - in other messages). The message stores the size of a chunk - instead of the size of the entire array; the storage size of - the entire array can be calculated by traversing the B-tree - that stores the chunk addresses.</li> - <li>Compact: The array is stored in one contiguous block, as - part of this object header message.</li> - </ol></td></tr> - <tr><td colspan="2"><b>Format of Data:</b> See the tables - below.</td></tr> - </table></center> - <!-- end msgdesc table --> - - <div align="center"> - <table class="format"> - <caption> - Data Layout Message (Versions 1 and 2) - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td>Version</td> - <td>Dimensionality</td> - <td>Layout Class</td> - <td>Reserved <em>(zero)</em></td> - </tr> - - <tr> - <td colspan="4">Reserved <em>(zero)</em></td> - </tr> - - <tr> - <td colspan="4"><br />Data Address<sup>O</sup> <em>(optional)</em><br /><br /></td> - </tr> - - <tr> - <td colspan="4">Dimension 0 Size</td> - </tr> - - <tr> - <td colspan="4">Dimension 1 Size</td> - </tr> - - <tr> - <td colspan="4">...</td> - </tr> - - <tr> - <td colspan="4">Dimension #n Size</td> - </tr> - - <tr> - <td colspan="4">Dataset Element Size <em>(optional)</em></td> - </tr> - - <tr> - <td colspan="4">Compact Data Size <em>(optional)</em></td> - </tr> - - <tr> - <td colspan="4"><br />Compact Data... <em>(variable size, optional)</em><br /><br /></td> - </tr> - </table> + <tr> + <td colspan="2"><b>Header Message Name:</b> Data Storage - + Layout</td> + </tr> + <tr> + <td colspan="2"><b>Header Message Type:</b> 0x0008</td> + </tr> + <tr> + <td colspan="2"><b>Length:</b> Varies</td> + </tr> + <tr> + <td colspan="2"><b>Status:</b> Required for datasets; may not be + repeated.</td> + </tr> + <tr> + <td><b>Description:</b></td> + <td>Data layout describes how the elements of a + multi-dimensional array are stored in the HDF5 file. Three types of + data layout are supported: + <ol> + <li>Contiguous: The array is stored in one contiguous area of + the file. This layout requires that the size of the array be + constant: data manipulations such as chunking, compression, + checksums, or encryption are not permitted. The message stores the + total storage size of the array. The offset of an element from the + beginning of the storage area is computed as in a C array.</li> + <li>Chunked: The array domain is regularly decomposed into + chunks, and each chunk is allocated and stored separately. This + layout supports arbitrary element traversals, compression, + encryption, and checksums. (these features are described in other + messages). The message stores the size of a chunk instead of the + size of the entire array; the storage size of the entire array can + be calculated by traversing the B-tree that stores the chunk + addresses.</li> + <li>Compact: The array is stored in one contiguous block, as + part of this object header message.</li> + </ol> + </td> + </tr> + <tr> + <td colspan="2"><b>Format of Data:</b> See the tables below.</td> + </tr> + </table> +</center> +<!-- end msgdesc table --> + +<div align="center"> + <table class="format"> + <caption>Data Layout Message (Versions 1 and 2)</caption> - <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> - </table> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> - </div> + <tr> + <td>Version</td> + <td>Dimensionality</td> + <td>Layout Class</td> + <td>Reserved <em>(zero)</em></td> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version</p></td> - <td> - <p>The version number information is used for changes in the format of the data - layout message and is described here: - <table class="list"> - <tr> - <th width="20%" align="center">Version</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>Never used.</td> - </tr> - - <tr> - <td align="center"><code>1</code></td> - <td>Used by version 1.4 and before of the library to encode layout information. - Data space is always allocated when the data set is created.</td> - </tr> - - <tr> - <td align="center"><code>2</code></td> - <td>Used by version 1.6.x of the library to encode layout information. - Data space is allocated only when it is necessary.</td> - </tr> - </table></p> - </td> - </tr> - - <tr> - <td><p>Dimensionality</p></td> - <td><p>An array has a fixed dimensionality. This field - specifies the number of dimension size fields later in the - message. The value stored for chunked storage is 1 greater than - the number of dimensions in the dataset’s dataspace. - For example, 2 is stored for a 1 dimensional dataset. - </p> - </td> - </tr> - - <tr> - <td><p>Layout Class</p></td> - <td><p>The layout class specifies the type of storage for the data - and how the other fields of the layout message are to be - interpreted. - - <table class="list"> - <tr> - <th width="20%" align="center">Value</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>Compact Storage - </td> - </tr> - - <tr> - <td align="center"><code>1</code></td> - <td>Contiguous Storage - </td> - </tr> - - <tr> - <td align="center"><code>2</code></td> - <td>Chunked Storage - </td> - </tr> - </table> - </p> - </td> - </tr> - - <tr> - <td><p>Data Address</p></td> - <td><p>For contiguous storage, this is the address of the raw - data in the file. For chunked storage this is the address - of the v1 B-tree that is used to look up the addresses of the - chunks. This field is not present for compact storage. - If the version for this message is greater than 1, the address - may have the “undefined address” value, to indicate that - storage has not yet been allocated for this array.</p> - </td> - </tr> - - <tr> - <td><p>Dimension #n Size</p></td> - <td><p>For contiguous and compact storage the dimensions define - the entire size of the array while for chunked storage they define - the size of a single chunk. In all cases, they are in units of - array elements (not bytes). The first dimension stored in the list - of dimensions is the slowest changing dimension and the last - dimension stored is the fastest changing dimension. - </p> - </td> - </tr> - - <tr> - <td><p>Dataset Element Size</p></td> - <td><p>The size of a dataset element, in bytes. This field is only - present for chunked storage. - </p> - </td> - </tr> - - <tr> - <td><p>Compact Data Size</p></td> - <td><p>This field is only present for compact data storage. - It contains the size of the raw data for the dataset array, in - bytes.</p> - </td> - </tr> + <tr> + <td colspan="4">Reserved <em>(zero)</em></td> + </tr> - <tr> - <td><p>Compact Data</p></td> - <td><p>This field is only present for compact data storage. - It contains the raw data for the dataset array.</p> - </td> - </tr> - </table> - </div> + <tr> + <td colspan="4"><br />Data Address<sup>O</sup> <em>(optional)</em><br /> + <br /></td> + </tr> - <br /> - <p>Version 3 of this message re-structured the format into specific - properties that are required for each layout class.</p> - - - <div align="center"> - <table class="format"> - <caption> - <b>Data Layout Message (Version 3)</b> - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td>Version</td> - <td>Layout Class</td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> - - <tr> - <td colspan="4"><br />Properties <em>(variable size)</em><br /><br /></td> - </tr> - </table> - </div> + <tr> + <td colspan="4">Dimension 0 Size</td> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version</p></td> - <td> - <p>The version number information is used for changes in the format of layout message - and is described here: - <table class="list"> - <tr> - <th width="20%" align="center">Version</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>3</code></td> - <td>Used by the version 1.6.3 and later of the library to store properties - for each layout class.</td> - </tr> - </table></p> - </td> - </tr> - - <tr> - <td><p>Layout Class</p></td> - <td><p>The layout class specifies the type of storage for the data - and how the other fields of the layout message are to be - interpreted. - <table class="list"> - <tr> - <th width="20%" align="center">Value</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>Compact Storage - </td> - </tr> - - <tr> - <td align="center"><code>1</code></td> - <td>Contiguous Storage - </td> - </tr> - - <tr> - <td align="center"><code>2</code></td> - <td>Chunked Storage - </td> - </tr> - </table> - </p> - </td> - </tr> - - <tr> - <td><p>Properties</p></td> - <td><p>This variable-sized field encodes information specific to each - layout class and is described below. If there is no property - information specified for a layout class, the size of this field - is zero bytes.</p></td> - </tr> - </table> - </div> + <tr> + <td colspan="4">Dimension 1 Size</td> + </tr> - <br /> - <p>Class-specific information for compact layout (Class 0): (Note: The dimensionality information - is in the Dataspace message)</p> - - - <div align="center"> - <table class="format"> - <caption> - Compact Storage Property Description - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td colspan="2">Size</td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> - - <tr> - <td colspan="4"><br />Raw Data... <em>(variable size)</em><br /><br /></td> - </tr> - </table> - </div> + <tr> + <td colspan="4">...</td> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Size</p></td> - <td><p>This field contains the size of the raw data for the dataset - array, in bytes. - </p> - </td> - </tr> - - <tr> - <td><p>Raw Data</p></td> - <td><p>This field contains the raw data for the dataset array.</p></td> - </tr> - </table> - </div> + <tr> + <td colspan="4">Dimension #n Size</td> + </tr> + <tr> + <td colspan="4">Dataset Element Size <em>(optional)</em></td> + </tr> - <br /> - <p>Class-specific information for contiguous layout (Class 1): (Note: The dimensionality information - is in the Dataspace message)</p> - - - <div align="center"> - <table class="format"> - <caption> - Contiguous Storage Property Description - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td colspan="4"><br />Address<sup>O</sup><br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Size<sup>L</sup><br /><br /></td> - </tr> - </table> + <tr> + <td colspan="4">Compact Data Size <em>(optional)</em></td> + </tr> - <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> + <td colspan="4"><br />Compact Data... <em>(variable size, + optional)</em><br /> + <br /></td> + </tr> + </table> + + <table class="note"> <tr> - <td> </td> - <td> - (Items marked with an ‘L’ in the above table are of the size - specified in “Size of Lengths” field in the superblock.) - </td></tr> - </table> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> + </table> - </div> +</div> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Address</p></td> - <td><p>This is the address of the raw data in the file. - The address may have the “undefined address” value, to indicate - that storage has not yet been allocated for this array.</p></td> - </tr> - - <tr> - <td><p>Size</p></td> - <td><p>This field contains the size allocated to store the raw data, - in bytes. - </p> - </td> - </tr> - </table> - </div> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + <tr> + <td><p>Version</p></td> + <td> + <p>The version number information is used for changes in the + format of the data layout message and is described here:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Version</th> + <th width="80%" align="left">Description</th> + </tr> - <br /> - <p>Class-specific information for chunked layout (Class 2):</p> - - - <div align="center"> - <table class="format"> - <caption> - Chunked Storage Property Description - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td>Dimensionality</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> - - <tr> - <td colspan="4"><br />Address<sup>O</sup><br /><br /></td> - </tr> - - <tr> - <td colspan="4">Dimension 0 Size</td> - </tr> - - <tr> - <td colspan="4">Dimension 1 Size</td> - </tr> - - <tr> - <td colspan="4">...</td> - </tr> - - <tr> - <td colspan="4">Dimension #n Size</td> - </tr> - - <tr> - <td colspan="4">Dataset Element Size</td> - </tr> - </table> + <tr> + <td align="center"><code>0</code></td> + <td>Never used.</td> + </tr> + + <tr> + <td align="center"><code>1</code></td> + <td>Used by version 1.4 and before of the library to encode + layout information. Data space is always allocated when the data + set is created.</td> + </tr> + + <tr> + <td align="center"><code>2</code></td> + <td>Used by version 1.6.x of the library to encode layout + information. Data space is allocated only when it is necessary.</td> + </tr> + </table> + <p></p> + </td> + </tr> - <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> - </table> + <td><p>Dimensionality</p></td> + <td><p>An array has a fixed dimensionality. This field + specifies the number of dimension size fields later in the message. + The value stored for chunked storage is 1 greater than the number + of dimensions in the dataset’s dataspace. For example, 2 is + stored for a 1 dimensional dataset.</p></td> + </tr> - </div> + <tr> + <td><p>Layout Class</p></td> + <td><p>The layout class specifies the type of storage for + the data and how the other fields of the layout message are to be + interpreted.</p> + <table class="list"> + <tr> + <th width="20%" align="center">Value</th> + <th width="80%" align="left">Description</th> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Dimensionality</p></td> - <td><p>A chunk has a fixed dimensionality. This field specifies - the number of dimension size fields later in the message.</p></td> - </tr> - - <tr> - <td><p>Address</p></td> - <td><p>This is the address of the v1 B-tree that is used to look up the - addresses of the chunks that actually store portions of the array - data. The address may have the “undefined address” value, to - indicate that storage has not yet been allocated for this array.</p></td> - </tr> - - <tr> - <td><p>Dimension #n Size</p></td> - <td><p>These values define the dimension size of a single chunk, in - units of array elements (not bytes). The first dimension stored in - the list of dimensions is the slowest changing dimension and the - last dimension stored is the fastest changing dimension. - </p> - </td> - </tr> - - <tr> - <td><p>Dataset Element Size</p></td> - <td><p>The size of a dataset element, in bytes. - </p> - </td> - </tr> - </table> - </div> + <tr> + <td align="center"><code>0</code></td> + <td>Compact Storage</td> + </tr> + + <tr> + <td align="center"><code>1</code></td> + <td>Contiguous Storage</td> + </tr> + + <tr> + <td align="center"><code>2</code></td> + <td>Chunked Storage</td> + </tr> + </table> + <p></p></td> + </tr> + + <tr> + <td><p>Data Address</p></td> + <td><p>For contiguous storage, this is the address of the + raw data in the file. For chunked storage this is the address of + the v1 B-tree that is used to look up the addresses of the chunks. + This field is not present for compact storage. If the version for + this message is greater than 1, the address may have the + “undefined address” value, to indicate that storage has + not yet been allocated for this array.</p></td> + </tr> + + <tr> + <td><p>Dimension #n Size</p></td> + <td><p>For contiguous and compact storage the dimensions + define the entire size of the array while for chunked storage they + define the size of a single chunk. In all cases, they are in units + of array elements (not bytes). The first dimension stored in the + list of dimensions is the slowest changing dimension and the last + dimension stored is the fastest changing dimension.</p></td> + </tr> + + <tr> + <td><p>Dataset Element Size</p></td> + <td><p>The size of a dataset element, in bytes. This field + is only present for chunked storage.</p></td> + </tr> + + <tr> + <td><p>Compact Data Size</p></td> + <td><p>This field is only present for compact data storage. + It contains the size of the raw data for the dataset array, in + bytes.</p></td> + </tr> + + <tr> + <td><p>Compact Data</p></td> + <td><p>This field is only present for compact data storage. + It contains the raw data for the dataset array.</p></td> + </tr> + </table> +</div> <br /> -<h4><a name="BogusMessage">IV.A.2.j. The Bogus Message</a></h4> +<p>Version 3 of this message re-structured the format into specific + properties that are required for each layout class.</p> - <!-- start msgdesc table --> - <center> + +<div align="center"> + <table class="format"> + <caption> + <b>Data Layout Message (Version 3)</b> + </caption> + + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr> + <td>Version</td> + <td>Layout Class</td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + + <tr> + <td colspan="4"><br />Properties <em>(variable size)</em><br /> + <br /></td> + </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Version</p></td> + <td> + <p>The version number information is used for changes in the + format of layout message and is described here:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Version</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>3</code></td> + <td>Used by the version 1.6.3 and later of the library to + store properties for each layout class.</td> + </tr> + </table> + <p></p> + </td> + </tr> + + <tr> + <td><p>Layout Class</p></td> + <td><p>The layout class specifies the type of storage for + the data and how the other fields of the layout message are to be + interpreted.</p> + <table class="list"> + <tr> + <th width="20%" align="center">Value</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>Compact Storage</td> + </tr> + + <tr> + <td align="center"><code>1</code></td> + <td>Contiguous Storage</td> + </tr> + + <tr> + <td align="center"><code>2</code></td> + <td>Chunked Storage</td> + </tr> + </table> + <p></p></td> + </tr> + + <tr> + <td><p>Properties</p></td> + <td><p>This variable-sized field encodes information + specific to each layout class and is described below. If there is + no property information specified for a layout class, the size of + this field is zero bytes.</p></td> + </tr> + </table> +</div> + +<br /> +<p>Class-specific information for compact layout (Class 0): (Note: + The dimensionality information is in the Dataspace message)</p> + + +<div align="center"> + <table class="format"> + <caption>Compact Storage Property Description</caption> + + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr> + <td colspan="2">Size</td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + + <tr> + <td colspan="4"><br />Raw Data... <em>(variable size)</em><br /> + <br /></td> + </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Size</p></td> + <td><p>This field contains the size of the raw data for the + dataset array, in bytes.</p></td> + </tr> + + <tr> + <td><p>Raw Data</p></td> + <td><p>This field contains the raw data for the dataset + array.</p></td> + </tr> + </table> +</div> + + +<br /> +<p>Class-specific information for contiguous layout (Class 1): + (Note: The dimensionality information is in the Dataspace message)</p> + + +<div align="center"> + <table class="format"> + <caption>Contiguous Storage Property Description</caption> + + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr> + <td colspan="4"><br />Address<sup>O</sup><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Size<sup>L</sup><br /> + <br /></td> + </tr> + </table> + + <table class="note"> + <tr> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> + <tr> + <td> </td> + <td>(Items marked with an ‘L’ in the above table are + of the size specified in “Size of Lengths” field in the + superblock.)</td> + </tr> + </table> + +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Address</p></td> + <td><p>This is the address of the raw data in the file. The + address may have the “undefined address” value, to + indicate that storage has not yet been allocated for this array.</p></td> + </tr> + + <tr> + <td><p>Size</p></td> + <td><p>This field contains the size allocated to store the + raw data, in bytes.</p></td> + </tr> + </table> +</div> + + +<br /> +<p>Class-specific information for chunked layout (Class 2):</p> + + +<div align="center"> + <table class="format"> + <caption>Chunked Storage Property Description</caption> + + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr> + <td>Dimensionality</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + + <tr> + <td colspan="4"><br />Address<sup>O</sup><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4">Dimension 0 Size</td> + </tr> + + <tr> + <td colspan="4">Dimension 1 Size</td> + </tr> + + <tr> + <td colspan="4">...</td> + </tr> + + <tr> + <td colspan="4">Dimension #n Size</td> + </tr> + + <tr> + <td colspan="4">Dataset Element Size</td> + </tr> + </table> + + <table class="note"> + <tr> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> + </table> + +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Dimensionality</p></td> + <td><p>A chunk has a fixed dimensionality. This field + specifies the number of dimension size fields later in the message.</p></td> + </tr> + + <tr> + <td><p>Address</p></td> + <td><p>This is the address of the v1 B-tree that is used to + look up the addresses of the chunks that actually store portions of + the array data. The address may have the “undefined + address” value, to indicate that storage has not yet been + allocated for this array.</p></td> + </tr> + + <tr> + <td><p>Dimension #n Size</p></td> + <td><p>These values define the dimension size of a single + chunk, in units of array elements (not bytes). The first dimension + stored in the list of dimensions is the slowest changing dimension + and the last dimension stored is the fastest changing dimension.</p></td> + </tr> + + <tr> + <td><p>Dataset Element Size</p></td> + <td><p>The size of a dataset element, in bytes.</p></td> + </tr> + </table> +</div> + +<br /> +<h4> + <a name="BogusMessage">IV.A.2.j. The Bogus Message</a> +</h4> + +<!-- start msgdesc table --> +<center> <table class="msgdesc"> - <tr><td colspan="2"><b>Header Message Name:</b> Bogus</td></tr> - <tr><td colspan="2"><b>Header Message Type:</b> 0x0009</td></tr> - <tr><td colspan="2"><b>Length:</b> 4 bytes</td></tr> - <tr><td colspan="2"><b>Status:</b> For testing only; should never - be stored in a valid file.</td></tr> - <tr><td><b>Description:</b></td> - <td>This message is used for testing the HDF5 Library’s - response to an “unknown” message type and should - never be encountered in a valid HDF5 file.</td></tr> - <tr><td colspan="2"><b>Format of Data:</b> See the tables - below.</td></tr> - </table></center> - <!-- end msgdesc table --> - - <div align="center"> - <table class="format"> - <caption> - Bogus Message - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td colspan="4">Bogus Value</td> - </tr> - </table> - </div> + <tr> + <td colspan="2"><b>Header Message Name:</b> Bogus</td> + </tr> + <tr> + <td colspan="2"><b>Header Message Type:</b> 0x0009</td> + </tr> + <tr> + <td colspan="2"><b>Length:</b> 4 bytes</td> + </tr> + <tr> + <td colspan="2"><b>Status:</b> For testing only; should never be + stored in a valid file.</td> + </tr> + <tr> + <td><b>Description:</b></td> + <td>This message is used for testing the HDF5 Library’s + response to an “unknown” message type and should never + be encountered in a valid HDF5 file.</td> + </tr> + <tr> + <td colspan="2"><b>Format of Data:</b> See the tables below.</td> + </tr> + </table> +</center> +<!-- end msgdesc table --> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Bogus Value</p></td> - <td> - <p>This value should always be: <code>0xdeadbeef</code>.</p> - </td> - </tr> - </table> - </div> +<div align="center"> + <table class="format"> + <caption>Bogus Message</caption> + + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr> + <td colspan="4">Bogus Value</td> + </tr> + </table> +</div> <br /> -<h4><a name="GroupInfoMessage">IV.A.2.k. The Group Info Message -</a></h4> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> - <!-- start msgdesc table --> - <center> + <tr> + <td><p>Bogus Value</p></td> + <td> + <p> + This value should always be: + <code>0xdeadbeef</code> + . + </p> + </td> + </tr> + </table> +</div> + +<br /> +<h4> + <a name="GroupInfoMessage">IV.A.2.k. The Group Info Message </a> +</h4> + +<!-- start msgdesc table --> +<center> <table class="msgdesc"> - <tr><td colspan="2"><b>Header Message Name:</b> Group Info</td></tr> - <tr><td colspan="2"><b>Header Message Type:</b> 0x000A</td></tr> - <tr><td colspan="2"><b>Length:</b> Varies</td></tr> - <tr><td colspan="2"><b>Status:</b> Optional; may not be - repeated.</td></tr> - <tr><td><b>Description:</b></td> - <td><p>This message stores information for the constants defining - a “new style” group’s behavior. Constant - information will be stored in this message and variable - information will be stored in the - <a href="#LinkInfoMessage">Link Info</a> message.</p> - <p>Note: the “estimated entry” information below is - used when determining the size of the object header for the - group when it is created.</p></td></tr> - <tr><td colspan="2"><b>Format of Data:</b> See the tables - below.</td></tr> - </table></center> - <!-- end msgdesc table --> - - <div align="center"> - <table class="format"> - <caption> - Group Info Message - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td>Version</td> - <td>Flags</td> - <td colspan="2">Link Phase Change: Maximum Compact Value <em>(optional)</em></td> - </tr> - <tr> - <td colspan="2">Link Phase Change: Minimum Dense Value <em>(optional)</em></td> - <td colspan="2">Estimated Number of Entries <em>(optional)</em></td> - </tr> - <tr> - <td colspan="2">Estimated Link Name Length of Entries <em>(optional)</em></td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> + <tr> + <td colspan="2"><b>Header Message Name:</b> Group Info</td> + </tr> + <tr> + <td colspan="2"><b>Header Message Type:</b> 0x000A</td> + </tr> + <tr> + <td colspan="2"><b>Length:</b> Varies</td> + </tr> + <tr> + <td colspan="2"><b>Status:</b> Optional; may not be repeated.</td> + </tr> + <tr> + <td><b>Description:</b></td> + <td><p> + This message stores information for the constants defining a + “new style” group’s behavior. Constant + information will be stored in this message and variable information + will be stored in the <a href="#LinkInfoMessage">Link Info</a> + message. + </p> + <p>Note: the “estimated entry” information below is + used when determining the size of the object header for the group + when it is created.</p></td> + </tr> + <tr> + <td colspan="2"><b>Format of Data:</b> See the tables below.</td> + </tr> + </table> +</center> +<!-- end msgdesc table --> - </table> - </div> +<div align="center"> + <table class="format"> + <caption>Group Info Message</caption> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version</p></td> - <td><p>The version number for this message. This document describes version 0.</p> - </td> - </tr> - - <tr> - <td><p>Flags</p></td> - <td><p>This is the group information flag with the following definition: - - <table class="list"> - <tr> - <th width="20%" align="center">Bit</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>If set, link phase change values are stored. - </td> - </tr> - <tr> - <td align="center"><code>1</code></td> - <td>If set, the estimated entry information is non-default - and is stored. - </td> - </tr> - <tr> - <td align="center"><code>2-7</code></td> - <td>Reserved</td> - </tr> - </table></p> - </td> - </tr> - - <tr> - <td><p>Link Phase Change: Maximum Compact Value</p></td> - <td><p>The is the maximum number of links to store “compactly” (in - the group’s object header).</p> - <p>This field is present if bit 0 of <em>Flags</em> is set.</p> - </td> - </tr> - - <tr> - <td><p>Link Phase Change: Minimum Dense Value</p></td> - <td><p>This is the minimum number of links to store “densely” (in - the group’s fractal heap). The fractal heap’s address is - located in the <a href="#LinkInfoMessage">Link Info</a> - message.</p> - <p>This field is present if bit 0 of <em>Flags</em> is set.</p> - </td> - </tr> - - <tr> - <td><p>Estimated Number of Entries</p></td> - <td><p>This is the estimated number of entries in groups.</p> - <p>If this field is not present, the default value of <code>4</code> - will be used for the estimated number of group entries.</p> - <p>This field is present if bit 1 of <em>Flags</em> is set.</p> - </td> - </tr> - - <tr> - <td><p>Estimated Link Name Length of Entries</p></td> - <td><p>This is the estimated length of entry name.</p> - <p>If this field is not present, the default value of <code>8</code> - will be used for the estimated link name length of group entries.</p> - <p>This field is present if bit 1 of <em>Flags</em> is set.</p> - </td> - </tr> + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> - </table> - </div> - </p> + <tr> + <td>Version</td> + <td>Flags</td> + <td colspan="2">Link Phase Change: Maximum Compact Value <em>(optional)</em></td> + </tr> + <tr> + <td colspan="2">Link Phase Change: Minimum Dense Value <em>(optional)</em></td> + <td colspan="2">Estimated Number of Entries <em>(optional)</em></td> + </tr> + <tr> + <td colspan="2">Estimated Link Name Length of Entries <em>(optional)</em></td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + + </table> +</div> <br /> -<h4><a name="FilterMessage">IV.A.2.l. The Data Storage - Filter -Pipeline Message</a></h4> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> - <!-- start msgdesc table --> - <center> + <tr> + <td><p>Version</p></td> + <td><p>The version number for this message. This document + describes version 0.</p></td> + </tr> + + <tr> + <td><p>Flags</p></td> + <td><p>This is the group information flag with the following + definition:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Bit</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>If set, link phase change values are stored.</td> + </tr> + <tr> + <td align="center"><code>1</code></td> + <td>If set, the estimated entry information is non-default + and is stored.</td> + </tr> + <tr> + <td align="center"><code>2-7</code></td> + <td>Reserved</td> + </tr> + </table> + <p></p></td> + </tr> + + <tr> + <td><p>Link Phase Change: Maximum Compact Value</p></td> + <td><p>The is the maximum number of links to store + “compactly” (in the group’s object header).</p> + <p> + This field is present if bit 0 of <em>Flags</em> is set. + </p></td> + </tr> + + <tr> + <td><p>Link Phase Change: Minimum Dense Value</p></td> + <td><p> + This is the minimum number of links to store “densely” + (in the group’s fractal heap). The fractal heap’s + address is located in the <a href="#LinkInfoMessage">Link Info</a> + message. + </p> + <p> + This field is present if bit 0 of <em>Flags</em> is set. + </p></td> + </tr> + + <tr> + <td><p>Estimated Number of Entries</p></td> + <td><p>This is the estimated number of entries in groups.</p> + <p> + If this field is not present, the default value of + <code>4</code> + will be used for the estimated number of group entries. + </p> + <p> + This field is present if bit 1 of <em>Flags</em> is set. + </p></td> + </tr> + + <tr> + <td><p>Estimated Link Name Length of Entries</p></td> + <td><p>This is the estimated length of entry name.</p> + <p> + If this field is not present, the default value of + <code>8</code> + will be used for the estimated link name length of group entries. + </p> + <p> + This field is present if bit 1 of <em>Flags</em> is set. + </p></td> + </tr> + + </table> +</div> +<p></p> + +<br /> +<h4> + <a name="FilterMessage">IV.A.2.l. The Data Storage - Filter + Pipeline Message</a> +</h4> + +<!-- start msgdesc table --> +<center> <table class="msgdesc"> - <tr><td colspan="2"><b>Header Message Name:</b> - Data Storage - Filter Pipeline</td></tr> - <tr><td colspan="2"><b>Header Message Type:</b> 0x000B</td></tr> - <tr><td colspan="2"><b>Length:</b> Varies</td></tr> - <tr><td colspan="2"><b>Status:</b> Optional; may not be - repeated.</td></tr> - <tr><td><b>Description:</b></td> - <td><p>This message describes the filter pipeline which should - be applied to the data stream by providing filter identification - numbers, flags, a name, and client data.</p> - <p>This message may be present in the object headers of both - dataset and group objects. For datasets, it specifies the - filters to apply to raw data. For groups, it specifies the - filters to apply to the group’s fractal heap. Currently, - only datasets using chunked data storage use the filter - pipeline on their raw data.</p></td></tr> - <tr><td colspan="2"><b>Format of Data:</b> See the tables - below.</td></tr> - </table></center> - <!-- end msgdesc table --> - - <div align="center"> - <table class="format"> - <caption> - Filter Pipeline Message - Version 1 - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td>Version</td> - <td>Number of Filters</td> - <td colspan="2">Reserved (zero)</td> - </tr> - - <tr> - <td colspan="4">Reserved (zero)</td> - </tr> - - <tr> - <td colspan="4"><br />Filter Description List <em>(variable size)</em><br /><br /></td> - </tr> - </table> - </div> + <tr> + <td colspan="2"><b>Header Message Name:</b> Data Storage - + Filter Pipeline</td> + </tr> + <tr> + <td colspan="2"><b>Header Message Type:</b> 0x000B</td> + </tr> + <tr> + <td colspan="2"><b>Length:</b> Varies</td> + </tr> + <tr> + <td colspan="2"><b>Status:</b> Optional; may not be repeated.</td> + </tr> + <tr> + <td><b>Description:</b></td> + <td><p>This message describes the filter pipeline which + should be applied to the data stream by providing filter + identification numbers, flags, a name, and client data.</p> + <p>This message may be present in the object headers of both + dataset and group objects. For datasets, it specifies the filters + to apply to raw data. For groups, it specifies the filters to apply + to the group’s fractal heap. Currently, only datasets using + chunked data storage use the filter pipeline on their raw data.</p></td> + </tr> + <tr> + <td colspan="2"><b>Format of Data:</b> See the tables below.</td> + </tr> + </table> +</center> +<!-- end msgdesc table --> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version</p></td> - <td><p>The version number for this message. This table - describes version 1.</p></td> - </tr> - - <tr> - <td><p>Number of Filters</p></td> - <td><p>The total number of filters described in this - message. The maximum possible number of filters in a - message is 32.</p></td> - </tr> - - <tr> - <td><p>Filter Description List</p></td> - <td><p>A description of each filter. A filter description - appears in the next table.</p></td> - </tr> - </table> - </div> +<div align="center"> + <table class="format"> + <caption>Filter Pipeline Message - Version 1</caption> - <br /> - <div align="center"> - <table class="format"> - <caption> - Filter Description - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td colspan="2">Filter Identification Value</td> - <td colspan="2">Name Length</td> - </tr> - - <tr> - <td colspan="2">Flags</td> - <td colspan="2">Number Client Data Values</td> - </tr> - - <tr> - <td colspan="4"><br />Name <em>(variable size, optional)</em><br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Client Data <em>(variable size, optional)</em><br /><br /></td> - </tr> - - <tr> - <td colspan="4">Padding <em>(variable size, optional)</em></td> - </tr> - </table> - </div> + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Filter Identification Value</p></td> - <td> - <p> - This value, often referred to as a filter identifier, - is designed to be a unique identifier for the filter. - Values from zero through 32,767 are reserved for filters - supported by The HDF Group in the HDF5 Library and for - filters requested and supported by third parties. - Filters supported by The HDF Group are documented immediately - below. Information on 3rd-party filters can be found at - The HDF Group’s - <a href="http://www.hdfgroup.org/services/contributions.html"> - Contributions</a> page.</p> - - <p> - To request a filter identifier, please contact - The HDF Group’s Help Desk at - <img src="Graphics/help.png" valign="middle" height="14" - alt="The HDF Group Help Desk">. - You will be asked to provide the following information:</p> - <ol> - <li>Contact information for the developer requesting the - new identifier</li> - <li>A short description of the new filter</li> - <li>Links to any relevant information, including licensing - information</li> - </ol> - <p> - Values from 32768 to 65535 are reserved for non-distributed uses - (for example, internal company usage) or for application usage - when testing a feature. The HDF Group does not track or document - the use of the filters with identifiers from this range.</p> - - <p> - The filters currently in library version 1.8.0 are - listed below: - - <table class="list"> - <tr> - <th width="20%" align="center">Identification</th> - <th width="15%" align="left">Name</th> - <th width="65%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>N/A</td> - <td>Reserved</td> - </tr> - - <tr> - <td align="center"><code>1</code></td> - <td>deflate</td> - <td>GZIP deflate compression</td> - </tr> - - <tr> - <td align="center"><code>2</code></td> - <td>shuffle</td> - <td>Data element shuffling</td> - </tr> - - <tr> - <td align="center"><code>3</code></td> - <td>fletcher32</td> - <td>Fletcher32 checksum</td> - </tr> - - <tr> - <td align="center"><code>4</code></td> - <td>szip</td> - <td>SZIP compression</td> - </tr> - - <tr> - <td align="center"><code>5</code></td> - <td>nbit</td> - <td>N-bit packing</td> - </tr> - - <tr> - <td align="center"><code>6</code></td> - <td>scaleoffset</td> - <td>Scale and offset encoded values</td> - </tr> - </table> - </p></td> - </tr> - - <tr> - <td><p>Name Length</p></td> - <td><p>Each filter has an optional null-terminated ASCII name - and this field holds the length of the name including the - null termination padded with nulls to be a multiple of - eight. If the filter has no name then a value of zero is - stored in this field.</p></td> - </tr> - - <tr> - <td><p>Flags</p></td> - <td><p>The flags indicate certain properties for a filter. The - bit values defined so far are: - <table class="list"> - <tr> - <th width="20%" align="center">Bit</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>If set then the filter is an optional filter. - During output, if an optional filter fails it will be - silently skipped in the pipeline.</td> - </tr> - - <tr> - <td align="center"><code>1-15</code></td> - <td>Reserved (zero)</td> - </tr> - </table></p> - </td> - </tr> - - <tr> - <td><p>Number of Client Data Values</p></td> - <td><p>Each filter can store integer values to control - how the filter operates. The number of entries in the - <em>Client Data</em> array is stored in this field.</p></td> - </tr> - - <tr> - <td><p>Name</p></td> - <td><p>If the <em>Name Length</em> field is non-zero then it will - contain the size of this field, padded to a multiple of eight. This - field contains a null-terminated, ASCII character - string to serve as a comment/name for the filter.</p></td> - </tr> - - <tr> - <td><p>Client Data</p></td> - <td><p>This is an array of four-byte integers which will be - passed to the filter function. The <em>Client Data Number</em> of - Values determines the number of elements in the array.</p></td> - </tr> - - <tr> - <td><p>Padding</p></td> - <td><p>Four bytes of zeroes are added to the message at this - point if the Client Data Number of Values field contains - an odd number.</p></td> - </tr> - </table> - </div> + <tr> + <td>Version</td> + <td>Number of Filters</td> + <td colspan="2">Reserved (zero)</td> + </tr> - <br /> - <div align="center"> - <table class="format"> - <caption> - Filter Pipeline Message - Version 2 - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td>Version</td> - <td>Number of Filters</td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> - - <tr> - <td colspan="4"><br />Filter Description List <em>(variable size)</em><br /><br /></td> - </tr> - </table> - </div> + <tr> + <td colspan="4">Reserved (zero)</td> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version</p></td> - <td><p>The version number for this message. This table - describes version 2.</p></td> - </tr> - - <tr> - <td><p>Number of Filters</p></td> - <td><p>The total number of filters described in this - message. The maximum possible number of filters in a - message is 32.</p></td> - </tr> - - <tr> - <td><p>Filter Description List</p></td> - <td><p>A description of each filter. A filter description - appears in the next table.</p></td> - </tr> - </table> - </div> + <tr> + <td colspan="4"><br />Filter Description List <em>(variable + size)</em><br /> + <br /></td> + </tr> + </table> +</div> - <br /> - <div align="center"> - <table class="format"> - <caption> - Filter Description - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td colspan="2">Filter Identification Value</td> - <td colspan="2">Name Length <em>(optional)</em></td> - </tr> - - <tr> - <td colspan="2">Flags</td> - <td colspan="2">Number Client Data Values</td> - </tr> - - <tr> - <td colspan="4"><br />Name <em>(variable size, optional)</em><br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Client Data <em>(variable size, optional)</em><br /><br /></td> - </tr> - </table> - </div> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Filter Identification Value</p></td> - <td> - <p> - This value, often referred to as a filter identifier, - is designed to be a unique identifier for the filter. - Values from zero through 32,767 are reserved for filters - supported by The HDF Group in the HDF5 Library and for - filters requested and supported by third parties. - Filters supported by The HDF Group are documented immediately - below. Information on 3rd-party filters can be found at - The HDF Group’s - <a href="http://www.hdfgroup.org/services/contributions.html"> - Contributions</a> page.</p> - - <p> - To request a filter identifier, please contact - The HDF Group’s Help Desk at - <img src="Graphics/help.png" valign="middle" height="14" - alt="The HDF Group Help Desk">. - You will be asked to provide the following information:</p> - <ol> - <li>Contact information for the developer requesting the - new identifier</li> - <li>A short description of the new filter</li> - <li>Links to any relevant information, including licensing - information</li> - </ol> - <p> - Values from 32768 to 65535 are reserved for non-distributed uses - (for example, internal company usage) or for application usage - when testing a feature. The HDF Group does not track or document - the use of the filters with identifiers from this range.</p> - - <p> - The filters currently in library version 1.8.0 are - listed below: - - <table class="list"> - <tr> - <th width="20%" align="center">Identification</th> - <th width="15%" align="left">Name</th> - <th width="65%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>N/A</td> - <td>Reserved</td> - </tr> - - <tr> - <td align="center"><code>1</code></td> - <td>deflate</td> - <td>GZIP deflate compression</td> - </tr> - - <tr> - <td align="center"><code>2</code></td> - <td>shuffle</td> - <td>Data element shuffling</td> - </tr> - - <tr> - <td align="center"><code>3</code></td> - <td>fletcher32</td> - <td>Fletcher32 checksum</td> - </tr> - - <tr> - <td align="center"><code>4</code></td> - <td>szip</td> - <td>SZIP compression</td> - </tr> - - <tr> - <td align="center"><code>5</code></td> - <td>nbit</td> - <td>N-bit packing</td> - </tr> - - <tr> - <td align="center"><code>6</code></td> - <td>scaleoffset</td> - <td>Scale and offset encoded values</td> - </tr> - </table> - </p></td> - </tr> - - <tr> - <td><p>Name Length</p></td> - <td><p>Each filter has an optional null-terminated ASCII name - and this field holds the length of the name including the - null termination padded with nulls to be a multiple of - eight. If the filter has no name then a value of zero is - stored in this field.</p> - <p>Filters with IDs less than 256 (in other words, filters - that are defined in this format documentation) do not store - the <em>Name Length</em> or <em>Name</em> fields. - </p> - </td> - </tr> - - <tr> - <td><p>Flags</p></td> - <td><p>The flags indicate certain properties for a filter. The - bit values defined so far are: - <table class="list"> - <tr> - <th width="20%" align="center">Bit</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>If set then the filter is an optional filter. - During output, if an optional filter fails it will be - silently skipped in the pipeline.</td> - </tr> - - <tr> - <td align="center"><code>1-15</code></td> - <td>Reserved (zero)</td> - </tr> - </table></p> - </td> - </tr> - - <tr> - <td><p>Number of Client Data Values</p></td> - <td><p>Each filter can store integer values to control - how the filter operates. The number of entries in the - <em>Client Data</em> array is stored in this field.</p></td> - </tr> - - <tr> - <td><p>Name</p></td> - <td><p>If the <em>Name Length</em> field is non-zero then it will - contain the size of this field, <em>not</em> padded to a multiple - of eight. This field contains a <em>non-</em>null-terminated, - ASCII character string to serve as a comment/name for the filter. - </p> - <p>Filters that are defined in this format documentation - such as deflate and shuffle do not store the <em>Name - Length</em> or <em>Name</em> fields. - </p> - </td> - </tr> - - <tr> - <td><p>Client Data</p></td> - <td><p>This is an array of four-byte integers which will be - passed to the filter function. The Client Data Number of - Values</em> determines the number of elements in the array.</p> - </td> - </tr> - </table> - </div> + <tr> + <td><p>Version</p></td> + <td><p>The version number for this message. This table + describes version 1.</p></td> + </tr> + + <tr> + <td><p>Number of Filters</p></td> + <td><p>The total number of filters described in this + message. The maximum possible number of filters in a message is 32.</p></td> + </tr> + + <tr> + <td><p>Filter Description List</p></td> + <td><p>A description of each filter. A filter description + appears in the next table.</p></td> + </tr> + </table> +</div> <br /> -<h4><a name="AttributeMessage">IV.A.2.m. The Attribute Message</a></h4> +<div align="center"> + <table class="format"> + <caption>Filter Description</caption> - <!-- start msgdesc table --> - <center> + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr> + <td colspan="2">Filter Identification Value</td> + <td colspan="2">Name Length</td> + </tr> + + <tr> + <td colspan="2">Flags</td> + <td colspan="2">Number Client Data Values</td> + </tr> + + <tr> + <td colspan="4"><br />Name <em>(variable size, optional)</em><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Client Data <em>(variable size, + optional)</em><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4">Padding <em>(variable size, optional)</em></td> + </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Filter Identification Value</p></td> + <td> + <p> + This value, often referred to as a filter identifier, is designed + to be a unique identifier for the filter. Values from zero through + 32,767 are reserved for filters supported by The HDF Group in the + HDF5 Library and for filters requested and supported by third + parties. Filters supported by The HDF Group are documented + immediately below. Information on 3rd-party filters can be found at + The HDF Group’s <a + href="http://www.hdfgroup.org/services/contributions.html"> + Contributions</a> page. + </p> + + <p> + To request a filter identifier, please contact The HDF + Group’s Help Desk at <img src="Graphics/help.png" + valign="middle" height="14" alt="The HDF Group Help Desk">. + You will be asked to provide the following information: + </p> + <ol> + <li>Contact information for the developer requesting the new + identifier</li> + <li>A short description of the new filter</li> + <li>Links to any relevant information, including licensing + information</li> + </ol> + <p>Values from 32768 to 65535 are reserved for non-distributed + uses (for example, internal company usage) or for application usage + when testing a feature. The HDF Group does not track or document + the use of the filters with identifiers from this range.</p> + + <p>The filters currently in library version 1.8.0 are listed + below:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Identification</th> + <th width="15%" align="left">Name</th> + <th width="65%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>N/A</td> + <td>Reserved</td> + </tr> + + <tr> + <td align="center"><code>1</code></td> + <td>deflate</td> + <td>GZIP deflate compression</td> + </tr> + + <tr> + <td align="center"><code>2</code></td> + <td>shuffle</td> + <td>Data element shuffling</td> + </tr> + + <tr> + <td align="center"><code>3</code></td> + <td>fletcher32</td> + <td>Fletcher32 checksum</td> + </tr> + + <tr> + <td align="center"><code>4</code></td> + <td>szip</td> + <td>SZIP compression</td> + </tr> + + <tr> + <td align="center"><code>5</code></td> + <td>nbit</td> + <td>N-bit packing</td> + </tr> + + <tr> + <td align="center"><code>6</code></td> + <td>scaleoffset</td> + <td>Scale and offset encoded values</td> + </tr> + </table> + <p></p> + </td> + </tr> + + <tr> + <td><p>Name Length</p></td> + <td><p>Each filter has an optional null-terminated ASCII + name and this field holds the length of the name including the null + termination padded with nulls to be a multiple of eight. If the + filter has no name then a value of zero is stored in this field.</p></td> + </tr> + + <tr> + <td><p>Flags</p></td> + <td><p>The flags indicate certain properties for a filter. + The bit values defined so far are:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Bit</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>If set then the filter is an optional filter. During + output, if an optional filter fails it will be silently skipped + in the pipeline.</td> + </tr> + + <tr> + <td align="center"><code>1-15</code></td> + <td>Reserved (zero)</td> + </tr> + </table> + <p></p></td> + </tr> + + <tr> + <td><p>Number of Client Data Values</p></td> + <td><p> + Each filter can store integer values to control how the filter + operates. The number of entries in the <em>Client Data</em> array + is stored in this field. + </p></td> + </tr> + + <tr> + <td><p>Name</p></td> + <td><p> + If the <em>Name Length</em> field is non-zero then it will contain + the size of this field, padded to a multiple of eight. This field + contains a null-terminated, ASCII character string to serve as a + comment/name for the filter. + </p></td> + </tr> + + <tr> + <td><p>Client Data</p></td> + <td><p> + This is an array of four-byte integers which will be passed to the + filter function. The <em>Client Data Number</em> of Values + determines the number of elements in the array. + </p></td> + </tr> + + <tr> + <td><p>Padding</p></td> + <td><p>Four bytes of zeroes are added to the message at this + point if the Client Data Number of Values field contains an odd + number.</p></td> + </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="format"> + <caption>Filter Pipeline Message - Version 2</caption> + + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr> + <td>Version</td> + <td>Number of Filters</td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + + <tr> + <td colspan="4"><br />Filter Description List <em>(variable + size)</em><br /> + <br /></td> + </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Version</p></td> + <td><p>The version number for this message. This table + describes version 2.</p></td> + </tr> + + <tr> + <td><p>Number of Filters</p></td> + <td><p>The total number of filters described in this + message. The maximum possible number of filters in a message is 32.</p></td> + </tr> + + <tr> + <td><p>Filter Description List</p></td> + <td><p>A description of each filter. A filter description + appears in the next table.</p></td> + </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="format"> + <caption>Filter Description</caption> + + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr> + <td colspan="2">Filter Identification Value</td> + <td colspan="2">Name Length <em>(optional)</em></td> + </tr> + + <tr> + <td colspan="2">Flags</td> + <td colspan="2">Number Client Data Values</td> + </tr> + + <tr> + <td colspan="4"><br />Name <em>(variable size, optional)</em><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Client Data <em>(variable size, + optional)</em><br /> + <br /></td> + </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Filter Identification Value</p></td> + <td> + <p> + This value, often referred to as a filter identifier, is designed + to be a unique identifier for the filter. Values from zero through + 32,767 are reserved for filters supported by The HDF Group in the + HDF5 Library and for filters requested and supported by third + parties. Filters supported by The HDF Group are documented + immediately below. Information on 3rd-party filters can be found at + The HDF Group’s <a + href="http://www.hdfgroup.org/services/contributions.html"> + Contributions</a> page. + </p> + + <p> + To request a filter identifier, please contact The HDF + Group’s Help Desk at <img src="Graphics/help.png" + valign="middle" height="14" alt="The HDF Group Help Desk">. + You will be asked to provide the following information: + </p> + <ol> + <li>Contact information for the developer requesting the new + identifier</li> + <li>A short description of the new filter</li> + <li>Links to any relevant information, including licensing + information</li> + </ol> + <p>Values from 32768 to 65535 are reserved for non-distributed + uses (for example, internal company usage) or for application usage + when testing a feature. The HDF Group does not track or document + the use of the filters with identifiers from this range.</p> + + <p>The filters currently in library version 1.8.0 are listed + below:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Identification</th> + <th width="15%" align="left">Name</th> + <th width="65%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>N/A</td> + <td>Reserved</td> + </tr> + + <tr> + <td align="center"><code>1</code></td> + <td>deflate</td> + <td>GZIP deflate compression</td> + </tr> + + <tr> + <td align="center"><code>2</code></td> + <td>shuffle</td> + <td>Data element shuffling</td> + </tr> + + <tr> + <td align="center"><code>3</code></td> + <td>fletcher32</td> + <td>Fletcher32 checksum</td> + </tr> + + <tr> + <td align="center"><code>4</code></td> + <td>szip</td> + <td>SZIP compression</td> + </tr> + + <tr> + <td align="center"><code>5</code></td> + <td>nbit</td> + <td>N-bit packing</td> + </tr> + + <tr> + <td align="center"><code>6</code></td> + <td>scaleoffset</td> + <td>Scale and offset encoded values</td> + </tr> + </table> + <p></p> + </td> + </tr> + + <tr> + <td><p>Name Length</p></td> + <td><p>Each filter has an optional null-terminated ASCII + name and this field holds the length of the name including the null + termination padded with nulls to be a multiple of eight. If the + filter has no name then a value of zero is stored in this field.</p> + <p> + Filters with IDs less than 256 (in other words, filters that are + defined in this format documentation) do not store the <em>Name + Length</em> or <em>Name</em> fields. + </p></td> + </tr> + + <tr> + <td><p>Flags</p></td> + <td><p>The flags indicate certain properties for a filter. + The bit values defined so far are:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Bit</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>If set then the filter is an optional filter. During + output, if an optional filter fails it will be silently skipped + in the pipeline.</td> + </tr> + + <tr> + <td align="center"><code>1-15</code></td> + <td>Reserved (zero)</td> + </tr> + </table> + <p></p></td> + </tr> + + <tr> + <td><p>Number of Client Data Values</p></td> + <td><p> + Each filter can store integer values to control how the filter + operates. The number of entries in the <em>Client Data</em> array + is stored in this field. + </p></td> + </tr> + + <tr> + <td><p>Name</p></td> + <td><p> + If the <em>Name Length</em> field is non-zero then it will contain + the size of this field, <em>not</em> padded to a multiple of eight. + This field contains a <em>non-</em>null-terminated, ASCII character + string to serve as a comment/name for the filter. + </p> + <p> + Filters that are defined in this format documentation such as + deflate and shuffle do not store the <em>Name Length</em> or <em>Name</em> + fields. + </p></td> + </tr> + + <tr> + <td><p>Client Data</p></td> + <td><p> + This is an array of four-byte integers which will be passed to the + filter function. The Client Data Number of Values<em></em> + determines the number of elements in the array. + </p></td> + </tr> + </table> +</div> + +<br /> +<h4> + <a name="AttributeMessage">IV.A.2.m. The Attribute Message</a> +</h4> + +<!-- start msgdesc table --> +<center> <table class="msgdesc"> - <tr><td colspan="2"><b>Header Message Name:</b> Attribute</td></tr> - <tr><td colspan="2"><b>Header Message Type:</b> 0x000C</td></tr> - <tr><td colspan="2"><b>Length:</b> Varies</td></tr> - <tr><td colspan="2"><b>Status:</b> Optional; may be - repeated.</td></tr> - <tr><td><b>Description:</b></td> - <td><p>The <em>Attribute</em> message is used to store objects - in the HDF5 file which are used as attributes, or - “metadata” about the current object. An attribute - is a small dataset; it has a name, a datatype, a dataspace, and - raw data. Since attributes are stored in the object header, they - should be relatively small (in other words, less than 64KB). - They can be associated with any type of object which has an - object header (groups, datasets, or committed (named) - datatypes).</p> - <p>In 1.8.x versions of the library, attributes can be larger - than 64KB. See the - <a href="UG/HDF5_Users_Guide-Responsive%20HTML5/index.html#t=HDF5_User_Guide%2FAttributes%2FHDF5_Attributes.htm%3Frhtocid%3Dtoc8.2_1%23TOC_8_5_Special_Issuesbc-13"> - “Special Issues”</a> section of the Attributes chapter - in the <cite>HDF5 User Guide</cite> for more information.</p> - <p>Note: Attributes on an object must have unique names: - the HDF5 Library currently enforces this by causing the - creation of an attribute with a duplicate name to fail. - Attributes on different objects may have the same name, - however.</p></td></tr> - <tr><td colspan="2"><b>Format of Data:</b> See the tables - below.</td></tr> - </table></center> - <!-- end msgdesc table --> - - <div align="center"> - <table class="format"> - <caption> - Attribute Message (Version 1) - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td>Version</td> - <td>Reserved (zero)</td> - <td colspan="2">Name Size</td> - </tr> - - <tr> - <td colspan="2">Datatype Size</td> - <td colspan="2">Dataspace Size</td> - </tr> - - <tr> - <td colspan="4"><br />Name <em>(variable size)</em><br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Datatype <em>(variable size)</em><br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Dataspace <em>(variable size)</em><br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Data <em>(variable size)</em><br /><br /></td> - </tr> - </table> - </div> + <tr> + <td colspan="2"><b>Header Message Name:</b> Attribute</td> + </tr> + <tr> + <td colspan="2"><b>Header Message Type:</b> 0x000C</td> + </tr> + <tr> + <td colspan="2"><b>Length:</b> Varies</td> + </tr> + <tr> + <td colspan="2"><b>Status:</b> Optional; may be repeated.</td> + </tr> + <tr> + <td><b>Description:</b></td> + <td><p> + The <em>Attribute</em> message is used to store objects in the HDF5 + file which are used as attributes, or “metadata” about + the current object. An attribute is a small dataset; it has a name, + a datatype, a dataspace, and raw data. Since attributes are stored + in the object header, they should be relatively small (in other + words, less than 64KB). They can be associated with any type of + object which has an object header (groups, datasets, or committed + (named) datatypes). + </p> + <p> + In 1.8.x versions of the library, attributes can be larger than + 64KB. See the <a + href="UG/HDF5_Users_Guide-Responsive%20HTML5/index.html#t=HDF5_User_Guide%2FAttributes%2FHDF5_Attributes.htm%3Frhtocid%3Dtoc8.2_1%23TOC_8_5_Special_Issuesbc-13"> + “Special Issues”</a> section of the Attributes chapter in + the <cite>HDF5 User Guide</cite> for more information. + </p> + <p>Note: Attributes on an object must have unique names: the + HDF5 Library currently enforces this by causing the creation of an + attribute with a duplicate name to fail. Attributes on different + objects may have the same name, however.</p></td> + </tr> + <tr> + <td colspan="2"><b>Format of Data:</b> See the tables below.</td> + </tr> + </table> +</center> +<!-- end msgdesc table --> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version</p></td> - <td><p>The version number information is used for changes in the format of the - attribute message and is described here: - <table class="list"> - <tr> - <th width="20%" align="center">Version</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>Never used.</td> - </tr> - - <tr> - <td align="center"><code>1</code></td> - <td>Used by the library before version 1.6 to encode attribute message. - This version does not support shared datatypes.</td> - </tr> - </table></p> - </td> - </tr> - - <tr> - <td><p>Name Size</p></td> - <td><p>The length of the attribute name in bytes including the - null terminator. Note that the <em>Name</em> field below may - contain additional padding not represented by this - field.</p></td> - </tr> - - <tr> - <td><p>Datatype Size</p></td> - <td><p>The length of the datatype description in the <em>Datatype</em> - field below. Note that the <em>Datatype</em> field may contain - additional padding not represented by this field.</p></td> - </tr> - - <tr> - <td><p>Dataspace Size</p></td> - <td><p>The length of the dataspace description in the <em>Dataspace</em> - field below. Note that the <em>Dataspace</em> field may contain - additional padding not represented by this field.</p></td> - </tr> - - <tr> - <td><p>Name</p></td> - <td><p>The null-terminated attribute name. This field is - padded with additional null characters to make it a - multiple of eight bytes.</p></td> - </tr> - - <tr> - <td><p>Datatype</p></td> - <td><p>The datatype description follows the same format as - described for the datatype object header message. This - field is padded with additional zero bytes to make it a - multiple of eight bytes.</p></td> - </tr> - - <tr> - <td><p>Dataspace</p></td> - <td><p>The dataspace description follows the same format as - described for the dataspace object header message. This - field is padded with additional zero bytes to make it a - multiple of eight bytes.</p></td> - </tr> - - <tr> - <td><p>Data</p></td> - <td><p>The raw data for the attribute. The size is determined - from the datatype and dataspace descriptions. This - field is <em>not</em> padded with additional bytes.</p></td> - </tr> - </table> - </div> +<div align="center"> + <table class="format"> + <caption>Attribute Message (Version 1)</caption> - <br /> - <div align="center"> - <table class="format"> - <caption> - Attribute Message (Version 2) - </caption> - - <tr align="center"> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td>Version</td> - <td>Flags</td> - <td colspan="2">Name Size</td> - </tr> - - <tr> - <td colspan="2">Datatype Size</td> - <td colspan="2">Dataspace Size</td> - </tr> - - <tr> - <td colspan="4"><br />Name <em>(variable size)</em><br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Datatype <em>(variable size)</em><br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Dataspace <em>(variable size)</em><br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Data <em>(variable size)</em><br /><br /></td> - </tr> - </table> - </div> + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version</p></td> - <td><p>The version number information is used for changes in the - format of the attribute message and is described here: + <tr> + <td>Version</td> + <td>Reserved (zero)</td> + <td colspan="2">Name Size</td> + </tr> + + <tr> + <td colspan="2">Datatype Size</td> + <td colspan="2">Dataspace Size</td> + </tr> + + <tr> + <td colspan="4"><br />Name <em>(variable size)</em><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Datatype <em>(variable size)</em><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Dataspace <em>(variable size)</em><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Data <em>(variable size)</em><br /> + <br /></td> + </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Version</p></td> + <td><p>The version number information is used for changes in + the format of the attribute message and is described here:</p> <table class="list"> - <tr> - <th width="20%" align="center">Version</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>2</code></td> - <td>Used by the library of version 1.6.x and after to encode - attribute messages. - This version supports shared datatypes. The fields of - name, datatype, and dataspace are not padded with - additional bytes of zero. - </td> - </tr> - </table></p> - </td> - </tr> - - <tr> - <td><p>Flags</p></td> - <td><p>This bit field contains extra information about - interpreting the attribute message: - - <table class="list"> - <tr> - <th width="20%" align="center">Bit</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>If set, datatype is shared.</td> - </tr> - - <tr> - <td align="center"><code>1</code></td> - <td>If set, dataspace is shared.</td> - </tr> - </table></p> - </td> - </tr> - - <tr> - <td><p>Name Size</p></td> - <td><p>The length of the attribute name in bytes including the - null terminator.</p></td> - </tr> - - <tr> - <td><p>Datatype Size</p></td> - <td><p>The length of the datatype description in the <em>Datatype</em> - field below.</p></td> - </tr> - - <tr> - <td><p>Dataspace Size</p></td> - <td><p>The length of the dataspace description in the <em>Dataspace</em> - field below.</p></td> - </tr> - - <tr> - <td><p>Name</p></td> - <td><p>The null-terminated attribute name. This field is <em>not</em> - padded with additional bytes.</p></td> - </tr> - - <tr> - <td><p>Datatype</p></td> - <td><p>The datatype description follows the same format as - described for the datatype object header message. - </p> - <p>If the - <em>Flag</em> field indicates this attribute’s datatype is - shared, this field will contain a “shared message” encoding - instead of the datatype encoding. - </p> - <p>This field is <em>not</em> padded with additional bytes. - </p> - </td> - </tr> - - <tr> - <td><p>Dataspace</p></td> - <td><p>The dataspace description follows the same format as - described for the dataspace object header message. - </p> - <p>If the - <em>Flag</em> field indicates this attribute’s dataspace is - shared, this field will contain a “shared message” encoding - instead of the dataspace encoding. - </p> - <p>This field is <em>not</em> padded with additional bytes.</p> - </td> - </tr> - - <tr> - <td><p>Data</p></td> - <td><p>The raw data for the attribute. The size is determined - from the datatype and dataspace descriptions. - </p> - <p>This field is <em>not</em> padded with additional zero bytes. - </p> - </td> - </tr> - </table> - </div> + <tr> + <th width="20%" align="center">Version</th> + <th width="80%" align="left">Description</th> + </tr> - <br /> - <div align="center"> - <table class="format"> - <caption> - Attribute Message (Version 3) - </caption> - - <tr align="center"> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td>Version</td> - <td>Flags</td> - <td colspan="2">Name Size</td> - </tr> - - <tr> - <td colspan="2">Datatype Size</td> - <td colspan="2">Dataspace Size</td> - </tr> - - <tr> - <td>Name Character Set Encoding</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> - - <tr> - <td colspan="4"><br />Name <em>(variable size)</em><br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Datatype <em>(variable size)</em><br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Dataspace <em>(variable size)</em><br /><br /></td> - </tr> - - <tr> - <td colspan="4"><br />Data <em>(variable size)</em><br /><br /></td> - </tr> - </table> - </div> + <tr> + <td align="center"><code>0</code></td> + <td>Never used.</td> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version</p></td> - <td><p>The version number information is used for changes in the - format of the attribute message and is described here: + <tr> + <td align="center"><code>1</code></td> + <td>Used by the library before version 1.6 to encode + attribute message. This version does not support shared + datatypes.</td> + </tr> + </table> + <p></p></td> + </tr> + + <tr> + <td><p>Name Size</p></td> + <td><p> + The length of the attribute name in bytes including the null + terminator. Note that the <em>Name</em> field below may contain + additional padding not represented by this field. + </p></td> + </tr> + + <tr> + <td><p>Datatype Size</p></td> + <td><p> + The length of the datatype description in the <em>Datatype</em> + field below. Note that the <em>Datatype</em> field may contain + additional padding not represented by this field. + </p></td> + </tr> + + <tr> + <td><p>Dataspace Size</p></td> + <td><p> + The length of the dataspace description in the <em>Dataspace</em> + field below. Note that the <em>Dataspace</em> field may contain + additional padding not represented by this field. + </p></td> + </tr> + + <tr> + <td><p>Name</p></td> + <td><p>The null-terminated attribute name. This field is + padded with additional null characters to make it a multiple of + eight bytes.</p></td> + </tr> + + <tr> + <td><p>Datatype</p></td> + <td><p>The datatype description follows the same format as + described for the datatype object header message. This field is + padded with additional zero bytes to make it a multiple of eight + bytes.</p></td> + </tr> + + <tr> + <td><p>Dataspace</p></td> + <td><p>The dataspace description follows the same format as + described for the dataspace object header message. This field is + padded with additional zero bytes to make it a multiple of eight + bytes.</p></td> + </tr> + + <tr> + <td><p>Data</p></td> + <td><p> + The raw data for the attribute. The size is determined from the + datatype and dataspace descriptions. This field is <em>not</em> + padded with additional bytes. + </p></td> + </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="format"> + <caption>Attribute Message (Version 2)</caption> + + <tr align="center"> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr> + <td>Version</td> + <td>Flags</td> + <td colspan="2">Name Size</td> + </tr> + + <tr> + <td colspan="2">Datatype Size</td> + <td colspan="2">Dataspace Size</td> + </tr> + + <tr> + <td colspan="4"><br />Name <em>(variable size)</em><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Datatype <em>(variable size)</em><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Dataspace <em>(variable size)</em><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Data <em>(variable size)</em><br /> + <br /></td> + </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Version</p></td> + <td><p>The version number information is used for changes in + the format of the attribute message and is described here:</p> <table class="list"> - <tr> - <th width="20%" align="center">Version</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>3</code></td> - <td>Used by the library of version 1.8.x and after to - encode attribute messages. - This version supports attributes with non-ASCII names. - </td> - </tr> - </table></p> - </td> - </tr> - - <tr> - <td><p>Flags</p></td> - <td><p>This bit field contains extra information about - interpreting the attribute message: - - <table class="list"> - <tr> - <th width="20%" align="center">Bit</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>If set, datatype is shared.</td> - </tr> - - <tr> - <td align="center"><code>1</code></td> - <td>If set, dataspace is shared.</td> - </tr> - </table></p> - </td> - </tr> - - <tr> - <td><p>Name Size</p></td> - <td><p>The length of the attribute name in bytes including the - null terminator.</p></td> - </tr> - - <tr> - <td><p>Datatype Size</p></td> - <td><p>The length of the datatype description in the <em>Datatype</em> - field below.</p></td> - </tr> - - <tr> - <td><p>Dataspace Size</p></td> - <td><p>The length of the dataspace description in the <em>Dataspace</em> - field below.</p></td> - </tr> - - <tr> - <td><p>Name Character Set Encoding</p></td> - <td><p>The character set encoding for the attribute’s name: - <table class="list"> - <tr> - <th width="20%" align="center">Value</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>ASCII character set encoding - </td> - </tr> - - <tr> - <td align="center"><code>1</code></td> - <td>UTF-8 character set encoding - </td> - </tr> - </table> - </p> - </td> - </tr> - - <tr> - <td><p>Name</p></td> - <td><p>The null-terminated attribute name. This field is <em>not</em> - padded with additional bytes.</p></td> - </tr> - - <tr> - <td><p>Datatype</p></td> - <td><p>The datatype description follows the same format as - described for the datatype object header message. - </p> - <p>If the - <em>Flag</em> field indicates this attribute’s datatype is - shared, this field will contain a “shared message” encoding - instead of the datatype encoding. - </p> - <p>This field is <em>not</em> padded with additional bytes. - </p> - </td> - </tr> - - <tr> - <td><p>Dataspace</p></td> - <td><p>The dataspace description follows the same format as - described for the dataspace object header message. - </p> - <p>If the - <em>Flag</em> field indicates this attribute’s dataspace is - shared, this field will contain a “shared message” encoding - instead of the dataspace encoding. - </p> - <p>This field is <em>not</em> padded with additional bytes.</p> - </td> - </tr> - - <tr> - <td><p>Data</p></td> - <td><p>The raw data for the attribute. The size is determined - from the datatype and dataspace descriptions. - </p> - <p>This field is <em>not</em> padded with additional zero bytes. - </p> - </td> - </tr> - </table> - </div> + <tr> + <th width="20%" align="center">Version</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>2</code></td> + <td>Used by the library of version 1.6.x and after to encode + attribute messages. This version supports shared datatypes. The + fields of name, datatype, and dataspace are not padded with + additional bytes of zero.</td> + </tr> + </table> + <p></p></td> + </tr> + + <tr> + <td><p>Flags</p></td> + <td><p>This bit field contains extra information about + interpreting the attribute message:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Bit</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>If set, datatype is shared.</td> + </tr> + + <tr> + <td align="center"><code>1</code></td> + <td>If set, dataspace is shared.</td> + </tr> + </table> + <p></p></td> + </tr> + + <tr> + <td><p>Name Size</p></td> + <td><p>The length of the attribute name in bytes including + the null terminator.</p></td> + </tr> + + <tr> + <td><p>Datatype Size</p></td> + <td><p> + The length of the datatype description in the <em>Datatype</em> + field below. + </p></td> + </tr> + + <tr> + <td><p>Dataspace Size</p></td> + <td><p> + The length of the dataspace description in the <em>Dataspace</em> + field below. + </p></td> + </tr> + + <tr> + <td><p>Name</p></td> + <td><p> + The null-terminated attribute name. This field is <em>not</em> + padded with additional bytes. + </p></td> + </tr> + + <tr> + <td><p>Datatype</p></td> + <td><p>The datatype description follows the same format as + described for the datatype object header message.</p> + <p> + If the <em>Flag</em> field indicates this attribute’s + datatype is shared, this field will contain a “shared + message” encoding instead of the datatype encoding. + </p> + <p> + This field is <em>not</em> padded with additional bytes. + </p></td> + </tr> + + <tr> + <td><p>Dataspace</p></td> + <td><p>The dataspace description follows the same format as + described for the dataspace object header message.</p> + <p> + If the <em>Flag</em> field indicates this attribute’s + dataspace is shared, this field will contain a “shared + message” encoding instead of the dataspace encoding. + </p> + <p> + This field is <em>not</em> padded with additional bytes. + </p></td> + </tr> + + <tr> + <td><p>Data</p></td> + <td><p>The raw data for the attribute. The size is + determined from the datatype and dataspace descriptions.</p> + <p> + This field is <em>not</em> padded with additional zero bytes. + </p></td> + </tr> + </table> +</div> <br /> -<h4><a name="CommentMessage">IV.A.2.n. The Object Comment -Message</a></h4> +<div align="center"> + <table class="format"> + <caption>Attribute Message (Version 3)</caption> - <!-- start msgdesc table --> - <center> + <tr align="center"> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr> + <td>Version</td> + <td>Flags</td> + <td colspan="2">Name Size</td> + </tr> + + <tr> + <td colspan="2">Datatype Size</td> + <td colspan="2">Dataspace Size</td> + </tr> + + <tr> + <td>Name Character Set Encoding</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + + <tr> + <td colspan="4"><br />Name <em>(variable size)</em><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Datatype <em>(variable size)</em><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Dataspace <em>(variable size)</em><br /> + <br /></td> + </tr> + + <tr> + <td colspan="4"><br />Data <em>(variable size)</em><br /> + <br /></td> + </tr> + </table> +</div> + +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Version</p></td> + <td><p>The version number information is used for changes in + the format of the attribute message and is described here:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Version</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>3</code></td> + <td>Used by the library of version 1.8.x and after to encode + attribute messages. This version supports attributes with + non-ASCII names.</td> + </tr> + </table> + <p></p></td> + </tr> + + <tr> + <td><p>Flags</p></td> + <td><p>This bit field contains extra information about + interpreting the attribute message:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Bit</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>If set, datatype is shared.</td> + </tr> + + <tr> + <td align="center"><code>1</code></td> + <td>If set, dataspace is shared.</td> + </tr> + </table> + <p></p></td> + </tr> + + <tr> + <td><p>Name Size</p></td> + <td><p>The length of the attribute name in bytes including + the null terminator.</p></td> + </tr> + + <tr> + <td><p>Datatype Size</p></td> + <td><p> + The length of the datatype description in the <em>Datatype</em> + field below. + </p></td> + </tr> + + <tr> + <td><p>Dataspace Size</p></td> + <td><p> + The length of the dataspace description in the <em>Dataspace</em> + field below. + </p></td> + </tr> + + <tr> + <td><p>Name Character Set Encoding</p></td> + <td><p>The character set encoding for the attribute’s + name:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Value</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>ASCII character set encoding</td> + </tr> + + <tr> + <td align="center"><code>1</code></td> + <td>UTF-8 character set encoding</td> + </tr> + </table> + <p></p></td> + </tr> + + <tr> + <td><p>Name</p></td> + <td><p> + The null-terminated attribute name. This field is <em>not</em> + padded with additional bytes. + </p></td> + </tr> + + <tr> + <td><p>Datatype</p></td> + <td><p>The datatype description follows the same format as + described for the datatype object header message.</p> + <p> + If the <em>Flag</em> field indicates this attribute’s + datatype is shared, this field will contain a “shared + message” encoding instead of the datatype encoding. + </p> + <p> + This field is <em>not</em> padded with additional bytes. + </p></td> + </tr> + + <tr> + <td><p>Dataspace</p></td> + <td><p>The dataspace description follows the same format as + described for the dataspace object header message.</p> + <p> + If the <em>Flag</em> field indicates this attribute’s + dataspace is shared, this field will contain a “shared + message” encoding instead of the dataspace encoding. + </p> + <p> + This field is <em>not</em> padded with additional bytes. + </p></td> + </tr> + + <tr> + <td><p>Data</p></td> + <td><p>The raw data for the attribute. The size is + determined from the datatype and dataspace descriptions.</p> + <p> + This field is <em>not</em> padded with additional zero bytes. + </p></td> + </tr> + </table> +</div> + +<br /> +<h4> + <a name="CommentMessage">IV.A.2.n. The Object Comment Message</a> +</h4> + +<!-- start msgdesc table --> +<center> <table class="msgdesc"> - <tr><td colspan="2"><b>Header Message Name:</b> Object - Comment</td></tr> - <tr><td colspan="2"><b>Header Message Type:</b> 0x000D</td></tr> - <tr><td colspan="2"><b>Length:</b> Varies</td></tr> - <tr><td colspan="2"><b>Status:</b> Optional; may not be - repeated.</td></tr> - <tr><td><b>Description:</b></td> - <td>The object comment is designed to be a short description of - an object. An object comment is a sequence of non-zero - (<code>\0</code>) ASCII characters with no other formatting - included by the library.</td></tr> - <tr><td colspan="2"><b>Format of Data:</b> See the tables - below.</td></tr> - </table></center> - <!-- end msgdesc table --> - - <div align="center"> - <table class="format"> - <caption> - Name Message - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td colspan="4"><br />Comment <em>(variable size)</em><br /><br /></td> - </tr> - </table> - </div> + <tr> + <td colspan="2"><b>Header Message Name:</b> Object Comment</td> + </tr> + <tr> + <td colspan="2"><b>Header Message Type:</b> 0x000D</td> + </tr> + <tr> + <td colspan="2"><b>Length:</b> Varies</td> + </tr> + <tr> + <td colspan="2"><b>Status:</b> Optional; may not be repeated.</td> + </tr> + <tr> + <td><b>Description:</b></td> + <td>The object comment is designed to be a short description of + an object. An object comment is a sequence of non-zero (<code>\0</code>) + ASCII characters with no other formatting included by the library. + </td> + </tr> + <tr> + <td colspan="2"><b>Format of Data:</b> See the tables below.</td> + </tr> + </table> +</center> +<!-- end msgdesc table --> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Name</p></td> - <td><p>A null terminated ASCII character string.</p></td> - </tr> - </table> - </div> +<div align="center"> + <table class="format"> + <caption>Name Message</caption> + + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr> + <td colspan="4"><br />Comment <em>(variable size)</em><br /> + <br /></td> + </tr> + </table> +</div> <br /> -<h4><a name="OldModificationTimeMessage">IV.A.2.o. The Object -Modification Time (Old) Message</a></h4> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> - <!-- start msgdesc table --> - <center> + <tr> + <td><p>Name</p></td> + <td><p>A null terminated ASCII character string.</p></td> + </tr> + </table> +</div> + +<br /> +<h4> + <a name="OldModificationTimeMessage">IV.A.2.o. The Object + Modification Time (Old) Message</a> +</h4> + +<!-- start msgdesc table --> +<center> <table class="msgdesc"> - <tr><td colspan="2"><b>Header Message Name:</b> Object - Modification Time (Old)</td></tr> - <tr><td colspan="2"><b>Header Message Type:</b> 0x000E</td></tr> - <tr><td colspan="2"><b>Length:</b> Fixed</td></tr> - <tr><td colspan="2"><b>Status:</b> Optional; may not be - repeated.</td></tr> - <tr><td><b>Description:</b></td> - <td><p>The object modification date and time is a timestamp - which indicates (using ISO-8601 date and time format) the last - modification of an object. The time is updated when any object - header message changes according to the system clock where the - change was posted. All fields of this message should be - interpreted as coordinated universal time (UTC).</p> - <p>This modification time message is deprecated in favor of - the “new” <a href="#ModificationTimeMessage">Object - Modification Time</a> message and is no longer written to the - file in versions of the HDF5 Library after the 1.6.0 - version.</p></td></tr> - <tr><td colspan="2"><b>Format of Data:</b> See the tables - below.</td></tr> - </table></center> - <!-- end msgdesc table --> - - <div align="center"> - <table class="format"> - <caption> - Modification Time Message - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td colspan="4">Year</td> - </tr> - - <tr> - <td colspan="2">Month</td> - <td colspan="2">Day of Month</td> - </tr> - - <tr> - <td colspan="2">Hour</td> - <td colspan="2">Minute</td> - </tr> - - <tr> - <td colspan="2">Second</td> - <td colspan="2">Reserved</td> - </tr> - </table> - </div> + <tr> + <td colspan="2"><b>Header Message Name:</b> Object Modification + Time (Old)</td> + </tr> + <tr> + <td colspan="2"><b>Header Message Type:</b> 0x000E</td> + </tr> + <tr> + <td colspan="2"><b>Length:</b> Fixed</td> + </tr> + <tr> + <td colspan="2"><b>Status:</b> Optional; may not be repeated.</td> + </tr> + <tr> + <td><b>Description:</b></td> + <td><p>The object modification date and time is a timestamp + which indicates (using ISO-8601 date and time format) the last + modification of an object. The time is updated when any object + header message changes according to the system clock where the + change was posted. All fields of this message should be interpreted + as coordinated universal time (UTC).</p> + <p> + This modification time message is deprecated in favor of the + “new” <a href="#ModificationTimeMessage">Object + Modification Time</a> message and is no longer written to the file in + versions of the HDF5 Library after the 1.6.0 version. + </p></td> + </tr> + <tr> + <td colspan="2"><b>Format of Data:</b> See the tables below.</td> + </tr> + </table> +</center> +<!-- end msgdesc table --> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Year</p></td> - <td><p>The four-digit year as an ASCII string. For example, - <code>1998</code>. - </p></td> - </tr> - - <tr> - <td><p>Month</p></td> - <td><p>The month number as a two digit ASCII string where - January is <code>01</code> and December is <code>12</code>.</p></td> - </tr> - - <tr> - <td><p>Day of Month</p></td> - <td><p>The day number within the month as a two digit ASCII - string. The first day of the month is <code>01</code>.</p></td> - </tr> - - <tr> - <td><p>Hour</p></td> - <td><p>The hour of the day as a two digit ASCII string where - midnight is <code>00</code> and 11:00pm is <code>23</code>.</p></td> - </tr> - - <tr> - <td><p>Minute</p></td> - <td><p>The minute of the hour as a two digit ASCII string where - the first minute of the hour is <code>00</code> and - the last is <code>59</code>.</p></td> - </tr> - - <tr> - <td><p>Second</p></td> - <td><p>The second of the minute as a two digit ASCII string - where the first second of the minute is <code>00</code> - and the last is <code>59</code>.</p></td> - </tr> - - <tr> - <td><p>Reserved</p></td> - <td><p>This field is reserved and should always be zero.</p></td> - </tr> - </table> - </div> +<div align="center"> + <table class="format"> + <caption>Modification Time Message</caption> + + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr> + <td colspan="4">Year</td> + </tr> + + <tr> + <td colspan="2">Month</td> + <td colspan="2">Day of Month</td> + </tr> + + <tr> + <td colspan="2">Hour</td> + <td colspan="2">Minute</td> + </tr> + + <tr> + <td colspan="2">Second</td> + <td colspan="2">Reserved</td> + </tr> + </table> +</div> <br /> -<h4><a name="SOHMTableMessage">IV.A.2.p. The Shared Message Table -Message</a></h4> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> - <!-- start msgdesc table --> - <center> + <tr> + <td><p>Year</p></td> + <td><p> + The four-digit year as an ASCII string. For example, + <code>1998</code> + . + </p></td> + </tr> + + <tr> + <td><p>Month</p></td> + <td><p> + The month number as a two digit ASCII string where January is + <code>01</code> + and December is + <code>12</code> + . + </p></td> + </tr> + + <tr> + <td><p>Day of Month</p></td> + <td><p> + The day number within the month as a two digit ASCII string. The + first day of the month is + <code>01</code> + . + </p></td> + </tr> + + <tr> + <td><p>Hour</p></td> + <td><p> + The hour of the day as a two digit ASCII string where midnight is + <code>00</code> + and 11:00pm is + <code>23</code> + . + </p></td> + </tr> + + <tr> + <td><p>Minute</p></td> + <td><p> + The minute of the hour as a two digit ASCII string where the first + minute of the hour is + <code>00</code> + and the last is + <code>59</code> + . + </p></td> + </tr> + + <tr> + <td><p>Second</p></td> + <td><p> + The second of the minute as a two digit ASCII string where the + first second of the minute is + <code>00</code> + and the last is + <code>59</code> + . + </p></td> + </tr> + + <tr> + <td><p>Reserved</p></td> + <td><p>This field is reserved and should always be zero.</p></td> + </tr> + </table> +</div> + +<br /> +<h4> + <a name="SOHMTableMessage">IV.A.2.p. The Shared Message Table + Message</a> +</h4> + +<!-- start msgdesc table --> +<center> <table class="msgdesc"> - <tr><td colspan="2"><b>Header Message Name:</b> Shared Message - Table</td></tr> - <tr><td colspan="2"><b>Header Message Type:</b> 0x000F</td></tr> - <tr><td colspan="2"><b>Length:</b> Fixed</td></tr> - <tr><td colspan="2"><b>Status:</b> Optional; may not be - repeated.</td></tr> - <tr><td><b>Description:</b></td> - <td>This message is used to locate the table of shared object - header message (SOHM) indexes. Each index consists of information - to find the shared messages from either the heap or object header. - This message is <em>only</em> found in the superblock - extension.</td></tr> - <tr><td colspan="2"><b>Format of Data:</b> See the tables - below.</td></tr> - </table></center> - <!-- end msgdesc table --> - - <div align="center"> - <table class="format"> - <caption> - Shared Message Table Message - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td>Version</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> - - <tr> - <td colspan="4"><br />Shared Object Header Message Table Address<sup>O</sup><br /><br /></td> - </tr> - - <tr> - <td>Number of Indices</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> + <tr> + <td colspan="2"><b>Header Message Name:</b> Shared Message Table</td> + </tr> + <tr> + <td colspan="2"><b>Header Message Type:</b> 0x000F</td> + </tr> + <tr> + <td colspan="2"><b>Length:</b> Fixed</td> + </tr> + <tr> + <td colspan="2"><b>Status:</b> Optional; may not be repeated.</td> + </tr> + <tr> + <td><b>Description:</b></td> + <td>This message is used to locate the table of shared object + header message (SOHM) indexes. Each index consists of information to + find the shared messages from either the heap or object header. This + message is <em>only</em> found in the superblock extension. + </td> + </tr> + <tr> + <td colspan="2"><b>Format of Data:</b> See the tables below.</td> + </tr> + </table> +</center> +<!-- end msgdesc table --> - </table> +<div align="center"> + <table class="format"> + <caption>Shared Message Table Message</caption> - <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> - </table> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> - </div> + <tr> + <td>Version</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version</p></td> - <td><p>The version number for this message. This document describes version 0.</p></td> - </tr> - - <tr> - <td><p>Shared Object Header Message Table Address</p></td> - <td><p>This field is the address of the master table for shared - object header message indexes.</p> - </td> - </tr> - - <tr> - <td><p>Number of Indices</p></td> - <td><p>This field is the number of indices in the master table. - </p></td> - </tr> + <tr> + <td colspan="4"><br />Shared Object Header Message Table + Address<sup>O</sup><br /> + <br /></td> + </tr> - </table> - </div> + <tr> + <td>Number of Indices</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + + </table> + + <table class="note"> + <tr> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> + </table> + +</div> <br /> -<h4><a name="ContinuationMessage">IV.A.2.q. The Object Header -Continuation Message</a></h4> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> - <!-- start msgdesc table --> - <center> + <tr> + <td><p>Version</p></td> + <td><p>The version number for this message. This document + describes version 0.</p></td> + </tr> + + <tr> + <td><p>Shared Object Header Message Table Address</p></td> + <td><p>This field is the address of the master table for + shared object header message indexes.</p></td> + </tr> + + <tr> + <td><p>Number of Indices</p></td> + <td><p>This field is the number of indices in the master + table.</p></td> + </tr> + + </table> +</div> + +<br /> +<h4> + <a name="ContinuationMessage">IV.A.2.q. The Object Header + Continuation Message</a> +</h4> + +<!-- start msgdesc table --> +<center> <table class="msgdesc"> - <tr><td colspan="2"><b>Header Message Name:</b> Object Header - Continuation</td></tr> - <tr><td colspan="2"><b>Header Message Type:</b> 0x0010</td></tr> - <tr><td colspan="2"><b>Length:</b> Fixed</td></tr> - <tr><td colspan="2"><b>Status:</b> Optional; may be - repeated.</td></tr> - <tr><td><b>Description:</b></td> - <td>The object header continuation is the location in the file - of a block containing more header messages for the current data - object. This can be used when header blocks become too large or - are likely to change over time.</td></tr> - <tr><td colspan="2"><b>Format of Data:</b> See the tables - below.</td></tr> - </table></center> - <!-- end msgdesc table --> - - <div align="center"> - <table class="format"> - <caption> - Object Header Continuation Message - </caption> + <tr> + <td colspan="2"><b>Header Message Name:</b> Object Header + Continuation</td> + </tr> + <tr> + <td colspan="2"><b>Header Message Type:</b> 0x0010</td> + </tr> + <tr> + <td colspan="2"><b>Length:</b> Fixed</td> + </tr> + <tr> + <td colspan="2"><b>Status:</b> Optional; may be repeated.</td> + </tr> + <tr> + <td><b>Description:</b></td> + <td>The object header continuation is the location in the file + of a block containing more header messages for the current data + object. This can be used when header blocks become too large or are + likely to change over time.</td> + </tr> + <tr> + <td colspan="2"><b>Format of Data:</b> See the tables below.</td> + </tr> + </table> +</center> +<!-- end msgdesc table --> + +<div align="center"> + <table class="format"> + <caption>Object Header Continuation Message</caption> <tr> - <th width=25%>byte</th> - <th width=25%>byte</th> - <th width=25%>byte</th> - <th width=25%>byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> </tr> <tr> - <td colspan="4"><br />Offset<sup>O</sup><br /><br /></td> + <td colspan="4"><br />Offset<sup>O</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Length<sup>L</sup><br /><br /></td> + <td colspan="4"><br />Length<sup>L</sup><br /> + <br /></td> </tr> - </table> + </table> - <table class="note"> + <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> <tr> - <td> </td> - <td> - (Items marked with an ‘L’ in the above table are of the size - specified in “Size of Lengths” field in the superblock.) - </td></tr> - </table> + <td> </td> + <td>(Items marked with an ‘L’ in the above table are + of the size specified in “Size of Lengths” field in the + superblock.)</td> + </tr> + </table> - </div> +</div> - <br /> - <div align="center"> - <table class="desc"> +<br /> +<div align="center"> + <table class="desc"> <tr> - <th width="30%">Field Name</th> - <th>Description</th> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>Offset</p></td> - <td><p>This value is the address in the file where the - header continuation block is located.</p></td> + <td><p>Offset</p></td> + <td><p>This value is the address in the file where the + header continuation block is located.</p></td> </tr> <tr> - <td><p>Length</p></td> - <td><p>This value is the length in bytes of the header continuation - block in the file.</p></td> + <td><p>Length</p></td> + <td><p>This value is the length in bytes of the header + continuation block in the file.</p></td> </tr> - </table> - </div> - <br /> + </table> +</div> +<br /> - <p>The format of the header continuation block that this message points - to depends on the version of the object header that the message is - contained within. - </p> - - <p> - Continuation blocks for version 1 object headers have no special - formatting information; they are merely a list of object header - message info sequences (type, size, flags, reserved bytes and data - for each message sequence). See the description - of <a href="#V1ObjectHeaderPrefix">Version 1 Data Object Header Prefix.</a> - </p> - - <p>Continuation blocks for version 2 object headers <em>do</em> have - special formatting information as described here - (see also the description of - <a href="#V2ObjectHeaderPrefix">Version 2 Data Object Header Prefix.</a>): - </p> - <div align="center"> - <table class="format"> - <caption> - Version 2 Object Header Continuation Block - </caption> - - <tr> - <th>byte</th> - <th>byte</th> - <th>byte</th> - <th>byte</th> - </tr> - - <tr> - <td colspan="4">Signature</td> - </tr> - <tr> - <td>Header Message Type #1</td> - <td colspan="2">Size of Header Message Data #1</td> - <td>Header Message #1 Flags</td> - </tr> - - <tr> - <td colspan="2">Header Message #1 Creation Order <em>(optional)</em></td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> - - <tr> - <td colspan="4"><br />Header Message Data #1<br /><br /></td> - </tr> - - <tr> - <td colspan="4">.<br />.<br />.<br /></td> - </tr> - - <tr> - <td>Header Message Type #n</td> - <td colspan="2">Size of Header Message Data #n</td> - <td>Header Message #n Flags</td> - </tr> - - <tr> - <td colspan="2">Header Message #n Creation Order <em>(optional)</em></td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> - - <tr> - <td colspan="4"><br />Header Message Data #n<br /><br /></td> - </tr> - - <tr> - <td colspan="4">Gap <em>(optional, variable size)</em></td> - </tr> - - <tr> - <td colspan="4">Checksum</td> - </tr> - </table> - </div> +<p>The format of the header continuation block that this message + points to depends on the version of the object header that the message + is contained within.</p> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Signature</p></td> - <td> - <p>The ASCII character string “<code>OCHK</code>” - is used to indicate the - beginning of an object header continuation block. This gives file - consistency checking utilities a better chance of reconstructing a - damaged file. - </p> - </td> - </tr> - - <tr> - <td><p>Header Message #n Type</p></td> - <td> - <p>Same format as version 1 of the object header, described above. - </p></td> - </tr> - - <tr> - <td><p>Size of Header Message #n Data</p></td> - <td> - <p>Same format as version 1 of the object header, described above. - </p></td> - </tr> - - <tr> - <td><p>Header Message #n Flags</p></td> - <td> - <p>Same format as version 1 of the object header, described above. - </p></td> - </tr> - - <tr> - <td><p>Header Message #n Creation Order</p></td> - <td> - <p>This field stores the order that a message of a given type - was created in.</p> - <p>This field is present if bit 2 of <em>flags</em> is set.</p> - </td> - </tr> - - <tr> - <td><p>Header Message #n Data</p></td> - <td> - <p>Same format as version 1 of the object header, described above. - </p></td> - </tr> - - <tr> - <td><p>Gap</p></td> - <td> - <p>A gap in an object header chunk is inferred by the end of the - messages for the chunk before the beginning of the chunk’s - checksum. Gaps are always smaller than the size of an - object header message prefix (message type + message size + - message flags).</p> - <p>Gaps are formed when a message (typically an attribute message) - in an earlier chunk is deleted and a message from a later - chunk that does not quite fit into the free space is moved - into the earlier chunk.</p> - </td> - </tr> - - <tr> - <td><p>Checksum</p></td> - <td> - <p>This is the checksum for the object header chunk. - </p> - </td> +<p> + Continuation blocks for version 1 object headers have no special + formatting information; they are merely a list of object header message + info sequences (type, size, flags, reserved bytes and data for each + message sequence). See the description of <a + href="#V1ObjectHeaderPrefix">Version 1 Data Object Header Prefix.</a> +</p> + +<p> + Continuation blocks for version 2 object headers <em>do</em> have + special formatting information as described here (see also the + description of <a href="#V2ObjectHeaderPrefix">Version 2 Data + Object Header Prefix.</a>): +</p> +<div align="center"> + <table class="format"> + <caption>Version 2 Object Header Continuation Block</caption> + + <tr> + <th>byte</th> + <th>byte</th> + <th>byte</th> + <th>byte</th> + </tr> + + <tr> + <td colspan="4">Signature</td> + </tr> + <tr> + <td>Header Message Type #1</td> + <td colspan="2">Size of Header Message Data #1</td> + <td>Header Message #1 Flags</td> + </tr> + + <tr> + <td colspan="2">Header Message #1 Creation Order <em>(optional)</em></td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + + <tr> + <td colspan="4"><br />Header Message Data #1<br /> + <br /></td> + </tr> + + <tr> + <td colspan="4">.<br />.<br />.<br /></td> + </tr> + + <tr> + <td>Header Message Type #n</td> + <td colspan="2">Size of Header Message Data #n</td> + <td>Header Message #n Flags</td> + </tr> + + <tr> + <td colspan="2">Header Message #n Creation Order <em>(optional)</em></td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + + <tr> + <td colspan="4"><br />Header Message Data #n<br /> + <br /></td> </tr> - </table> - </div> + + <tr> + <td colspan="4">Gap <em>(optional, variable size)</em></td> + </tr> + + <tr> + <td colspan="4">Checksum</td> + </tr> + </table> +</div> <br /> -<h4><a name="SymbolTableMessage">IV.A.2.r. The Symbol Table -Message</a></h4> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> - <!-- start msgdesc table --> - <center> + <tr> + <td><p>Signature</p></td> + <td> + <p> + The ASCII character string “ + <code>OCHK</code> + ” is used to indicate the beginning of an object header + continuation block. This gives file consistency checking utilities + a better chance of reconstructing a damaged file. + </p> + </td> + </tr> + + <tr> + <td><p>Header Message #n Type</p></td> + <td> + <p>Same format as version 1 of the object header, described + above.</p> + </td> + </tr> + + <tr> + <td><p>Size of Header Message #n Data</p></td> + <td> + <p>Same format as version 1 of the object header, described + above.</p> + </td> + </tr> + + <tr> + <td><p>Header Message #n Flags</p></td> + <td> + <p>Same format as version 1 of the object header, described + above.</p> + </td> + </tr> + + <tr> + <td><p>Header Message #n Creation Order</p></td> + <td> + <p>This field stores the order that a message of a given type + was created in.</p> + <p> + This field is present if bit 2 of <em>flags</em> is set. + </p> + </td> + </tr> + + <tr> + <td><p>Header Message #n Data</p></td> + <td> + <p>Same format as version 1 of the object header, described + above.</p> + </td> + </tr> + + <tr> + <td><p>Gap</p></td> + <td> + <p>A gap in an object header chunk is inferred by the end of the + messages for the chunk before the beginning of the chunk’s + checksum. Gaps are always smaller than the size of an object header + message prefix (message type + message size + message flags).</p> + <p>Gaps are formed when a message (typically an attribute + message) in an earlier chunk is deleted and a message from a later + chunk that does not quite fit into the free space is moved into the + earlier chunk.</p> + </td> + </tr> + + <tr> + <td><p>Checksum</p></td> + <td> + <p>This is the checksum for the object header chunk.</p> + </td> + </tr> + </table> +</div> + +<br /> +<h4> + <a name="SymbolTableMessage">IV.A.2.r. The Symbol Table Message</a> +</h4> + +<!-- start msgdesc table --> +<center> <table class="msgdesc"> - <tr><td colspan="2"><b>Header Message Name:</b> Symbol Table - Message</td></tr> - <tr><td colspan="2"><b>Header Message Type:</b> 0x0011</td></tr> - <tr><td colspan="2"><b>Length:</b> Fixed</td></tr> - <tr><td colspan="2"><b>Status:</b> Required for - “old style” groups; may not be repeated.</td></tr> - <tr><td><b>Description:</b></td> - <td>Each “old style” group has a v1 B-tree and a - local heap for storing symbol table entries, which are located - with this message.</td></tr> - <tr><td colspan="2"><b>Format of data:</b> See the tables - below.</td></tr> - </table></center> - <!-- end msgdesc table --> - - <div align="center"> - <table class="format"> + <tr> + <td colspan="2"><b>Header Message Name:</b> Symbol Table Message</td> + </tr> + <tr> + <td colspan="2"><b>Header Message Type:</b> 0x0011</td> + </tr> + <tr> + <td colspan="2"><b>Length:</b> Fixed</td> + </tr> + <tr> + <td colspan="2"><b>Status:</b> Required for “old + style” groups; may not be repeated.</td> + </tr> + <tr> + <td><b>Description:</b></td> + <td>Each “old style” group has a v1 B-tree and a + local heap for storing symbol table entries, which are located with + this message.</td> + </tr> + <tr> + <td colspan="2"><b>Format of data:</b> See the tables below.</td> + </tr> + </table> +</center> +<!-- end msgdesc table --> + +<div align="center"> + <table class="format"> <caption> - <b>Symbol Table Message</b> + <b>Symbol Table Message</b> </caption> <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> </tr> <tr> - <td colspan="4"><br />v1 B-tree Address<sup>O</sup><br /><br /></td> + <td colspan="4"><br />v1 B-tree Address<sup>O</sup><br /> + <br /></td> </tr> <tr> - <td colspan="4"><br />Local Heap Address<sup>O</sup><br /><br /></td> + <td colspan="4"><br />Local Heap Address<sup>O</sup><br /> + <br /></td> </tr> - </table> + </table> - <table class="note"> + <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> - </table> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> + </table> - </div> +</div> - <br /> - <div align="center"> - <table class="desc"> +<br /> +<div align="center"> + <table class="desc"> <tr> - <th width="30%">Field Name</th> - <th>Description</th> + <th width="30%">Field Name</th> + <th>Description</th> </tr> <tr> - <td><p>v1 B-tree Address</p></td> - <td><p>This value is the address of the v1 B-tree containing the - symbol table entries for the group.</p></td> + <td><p>v1 B-tree Address</p></td> + <td><p>This value is the address of the v1 B-tree containing + the symbol table entries for the group.</p></td> </tr> <tr> - <td><p>Local Heap Address</p></td> - <td><p>This value is the address of the local heap containing - the link names for the symbol table entries for the group.</p></td> + <td><p>Local Heap Address</p></td> + <td><p>This value is the address of the local heap + containing the link names for the symbol table entries for the + group.</p></td> </tr> - </table> - </div> + </table> +</div> <br /> -<h4><a name="ModificationTimeMessage">IV.A.2.s. The Object -Modification Time Message</a></h4> +<h4> + <a name="ModificationTimeMessage">IV.A.2.s. The Object Modification + Time Message</a> +</h4> - <!-- start msgdesc table --> - <center> +<!-- start msgdesc table --> +<center> <table class="msgdesc"> - <tr><td colspan="2"><b>Header Message Name:</b> Object - Modification Time</td></tr> - <tr><td colspan="2"><b>Header Message Type:</b> 0x0012</td></tr> - <tr><td colspan="2"><b>Length:</b> Fixed</td></tr> - <tr><td colspan="2"><b>Status:</b> Optional; may not be - repeated.</td></tr> - <tr><td><b>Description:</b></td> - <td>The object modification time is a timestamp which indicates - the time of the last modification of an object. The time is - updated when any object header message changes according to - the system clock where the change was posted.</td></tr> - <tr><td colspan="2"><b>Format of Data:</b> See the tables - below.</td></tr> - </table></center> - <!-- end msgdesc table --> - - <div align="center"> - <table class="format"> - <caption> - Modification Time Message - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td>Version</td> - <td colspan="3">Reserved (zero)</td> - </tr> - - <tr> - <td colspan="4">Seconds After UNIX Epoch</td> - </tr> - </table> - </div> + <tr> + <td colspan="2"><b>Header Message Name:</b> Object Modification + Time</td> + </tr> + <tr> + <td colspan="2"><b>Header Message Type:</b> 0x0012</td> + </tr> + <tr> + <td colspan="2"><b>Length:</b> Fixed</td> + </tr> + <tr> + <td colspan="2"><b>Status:</b> Optional; may not be repeated.</td> + </tr> + <tr> + <td><b>Description:</b></td> + <td>The object modification time is a timestamp which indicates + the time of the last modification of an object. The time is updated + when any object header message changes according to the system clock + where the change was posted.</td> + </tr> + <tr> + <td colspan="2"><b>Format of Data:</b> See the tables below.</td> + </tr> + </table> +</center> +<!-- end msgdesc table --> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version</p></td> - <td><p>The version number is used for changes in the format of Object Modification Time - and is described here: - <table class="list"> - <tr> - <th width="20%" align="center">Version</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>Never used.</td> - </tr> - - <tr> - <td align="center"><code>1</code></td> - <td>Used by Version 1.6.1 and after of the library to encode time. In - this version, the time is the seconds after Epoch.</td> - </tr> - </table></p> - </td> - </tr> - - <tr> - <td><p>Seconds After UNIX Epoch</p></td> - <td><p>A 32-bit unsigned integer value that stores the number of - seconds since 0 hours, 0 minutes, 0 seconds, January 1, 1970, - Coordinated Universal Time.</p></td> - </tr> - </table> - </div> +<div align="center"> + <table class="format"> + <caption>Modification Time Message</caption> + + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr> + <td>Version</td> + <td colspan="3">Reserved (zero)</td> + </tr> + + <tr> + <td colspan="4">Seconds After UNIX Epoch</td> + </tr> + </table> +</div> <br /> -<h4><a name="BtreeKValuesMessage">IV.A.2.t. The B-tree -‘K’ Values Message</a></h4> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> - <!-- start msgdesc table --> - <center> + <tr> + <td><p>Version</p></td> + <td><p>The version number is used for changes in the format + of Object Modification Time and is described here:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Version</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>Never used.</td> + </tr> + + <tr> + <td align="center"><code>1</code></td> + <td>Used by Version 1.6.1 and after of the library to encode + time. In this version, the time is the seconds after Epoch.</td> + </tr> + </table> + <p></p></td> + </tr> + + <tr> + <td><p>Seconds After UNIX Epoch</p></td> + <td><p>A 32-bit unsigned integer value that stores the + number of seconds since 0 hours, 0 minutes, 0 seconds, January 1, + 1970, Coordinated Universal Time.</p></td> + </tr> + </table> +</div> + +<br /> +<h4> + <a name="BtreeKValuesMessage">IV.A.2.t. The B-tree ‘K’ + Values Message</a> +</h4> + +<!-- start msgdesc table --> +<center> <table class="msgdesc"> - <tr><td colspan="2"><b>Header Message Name:</b> B-tree - ‘K’ Values</td></tr> - <tr><td colspan="2"><b>Header Message Type:</b> 0x0013</td></tr> - <tr><td colspan="2"><b>Length:</b> Fixed</td></tr> - <tr><td colspan="2"><b>Status:</b> Optional; may not be - repeated.</td></tr> - <tr><td><b>Description:</b></td> - <td>This message retrieves non-default ‘K’ values - for internal and leaf nodes of a group or indexed storage v1 - B-trees. This message is <em>only</em> found in the superblock - extension.</td></tr> - <tr><td colspan="2"><b>Format of Data:</b> See the tables - below.</td></tr> - </table></center> - <!-- end msgdesc table --> - - <div align="center"> - <table class="format"> - <caption> - B-tree ‘K’ Values Message - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td>Version</td> - <td colspan="2">Indexed Storage Internal Node K</td> - <td bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> - - <tr> - <td colspan="2">Group Internal Node K</td> - <td colspan="2">Group Leaf Node K</td> - </tr> - </table> - </div> + <tr> + <td colspan="2"><b>Header Message Name:</b> B-tree + ‘K’ Values</td> + </tr> + <tr> + <td colspan="2"><b>Header Message Type:</b> 0x0013</td> + </tr> + <tr> + <td colspan="2"><b>Length:</b> Fixed</td> + </tr> + <tr> + <td colspan="2"><b>Status:</b> Optional; may not be repeated.</td> + </tr> + <tr> + <td><b>Description:</b></td> + <td>This message retrieves non-default ‘K’ values + for internal and leaf nodes of a group or indexed storage v1 + B-trees. This message is <em>only</em> found in the superblock + extension. + </td> + </tr> + <tr> + <td colspan="2"><b>Format of Data:</b> See the tables below.</td> + </tr> + </table> +</center> +<!-- end msgdesc table --> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version</p></td> - <td><p>The version number for this message. This document describes - version 0.</p> - </td> - </tr> - - <tr> - <td><p>Indexed Storage Internal Node K</p></td> - <td><p>This is the node ‘K’ value for each internal node of an - indexed storage v1 B-tree. See the description of this field - in version 0 and 1 of the superblock as well the section on - v1 B-trees. - </p> - </td> - </tr> - - <tr> - <td><p>Group Internal Node K</p></td> - <td><p>This is the node ‘K’ value for each internal node of a group - v1 B-tree. See the description of this field in version 0 and - 1 of the superblock as well as the section on v1 B-trees. - </p> - </td> - </tr> - - <tr> - <td><p>Group Leaf Node K</p></td> - <td><p>This is the node ‘K’ value for each leaf node of a group v1 - B-tree. See the description of this field in version 0 and 1 - of the superblock as well as the section on v1 B-trees. - </p> - </td> - </tr> +<div align="center"> + <table class="format"> + <caption>B-tree ‘K’ Values Message</caption> - </table> - </div> + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr> + <td>Version</td> + <td colspan="2">Indexed Storage Internal Node K</td> + <td bgcolor="#DDDDDD"><em>This space inserted only to align + table nicely</em></td> + </tr> + + <tr> + <td colspan="2">Group Internal Node K</td> + <td colspan="2">Group Leaf Node K</td> + </tr> + </table> +</div> <br /> -<h4><a name="DrvInfoMessage">IV.A.2.u. The Driver Info -Message</a></h4> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> - <!-- start msgdesc table --> - <center> + <tr> + <td><p>Version</p></td> + <td><p>The version number for this message. This document + describes version 0.</p></td> + </tr> + + <tr> + <td><p>Indexed Storage Internal Node K</p></td> + <td><p>This is the node ‘K’ value for each + internal node of an indexed storage v1 B-tree. See the description + of this field in version 0 and 1 of the superblock as well the + section on v1 B-trees.</p></td> + </tr> + + <tr> + <td><p>Group Internal Node K</p></td> + <td><p>This is the node ‘K’ value for each + internal node of a group v1 B-tree. See the description of this + field in version 0 and 1 of the superblock as well as the section + on v1 B-trees.</p></td> + </tr> + + <tr> + <td><p>Group Leaf Node K</p></td> + <td><p>This is the node ‘K’ value for each leaf + node of a group v1 B-tree. See the description of this field in + version 0 and 1 of the superblock as well as the section on v1 + B-trees.</p></td> + </tr> + + </table> +</div> + +<br /> +<h4> + <a name="DrvInfoMessage">IV.A.2.u. The Driver Info Message</a> +</h4> + +<!-- start msgdesc table --> +<center> <table class="msgdesc"> - <tr><td colspan="2"><b>Header Message Name:</b> Driver - Info</td></tr> - <tr><td colspan="2"><b>Header Message Type:</b> 0x0014</td></tr> - <tr><td colspan="2"><b>Length:</b> Varies</td></tr> - <tr><td colspan="2"><b>Status:</b> Optional; may not be - repeated.</td></tr> - - <tr><td> - <b>Description:</b></td> - <td>This message contains information needed by the file driver - to reopen a file. This message is <em>only</em> found in the - superblock extension: see the <a href="#SuperblockExt"> - “Disk Format: Level 0C - Superblock Extension”</a> - section for more information. For more information on the fields - in the driver info message, see the <a href="#DriverInfo"> - “Disk Format : Level 0B - File Driver Info”</a> - section; those who use the multi and family file drivers will - find this section particularly helpful.</td></tr> - <tr><td colspan="2"><b>Format of Data:</b> See the tables - below.</td></tr> - </table></center> - <!-- end msgdesc table --> - - <div align="center"> - <table class="format"> - <caption> - Driver Info Message - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td>Version</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> - <tr> - <td colspan="4"><br />Driver Identification</td> - </tr> - - <tr> - <td colspan="2">Driver Information Size</td> - <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> - - <tr> - <td colspan="4"><br /><br />Driver Information <em>(variable size)</em><br /><br /><br /></td> - </tr> + <tr> + <td colspan="2"><b>Header Message Name:</b> Driver Info</td> + </tr> + <tr> + <td colspan="2"><b>Header Message Type:</b> 0x0014</td> + </tr> + <tr> + <td colspan="2"><b>Length:</b> Varies</td> + </tr> + <tr> + <td colspan="2"><b>Status:</b> Optional; may not be repeated.</td> + </tr> - </table> - </div> + <tr> + <td><b>Description:</b></td> + <td>This message contains information needed by the file driver + to reopen a file. This message is <em>only</em> found in the + superblock extension: see the <a href="#SuperblockExt"> + “Disk Format: Level 0C - Superblock Extension”</a> section + for more information. For more information on the fields in the + driver info message, see the <a href="#DriverInfo"> “Disk + Format : Level 0B - File Driver Info”</a> section; those who use + the multi and family file drivers will find this section + particularly helpful. + </td> + </tr> + <tr> + <td colspan="2"><b>Format of Data:</b> See the tables below.</td> + </tr> + </table> +</center> +<!-- end msgdesc table --> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version</p></td> - <td><p>The version number for this message. This document describes - version 0.</p> - </td> - </tr> - - <tr> - <td><p>Driver Identification</p></td> - <td><p>This is an eight-byte ASCII string without null termination which - identifies the driver. - </p> - </td> - </tr> - - <tr> - <td><p>Driver Information Size</p></td> - <td><p>The size in bytes of the <em>Driver Information</em> field of this - message.</p> - </td> - </tr> - - <tr> - <td><p>Driver Information</p></td> - <td><p>Driver information is stored in a format defined by the file driver.</p> - </td> - </tr> - </table> - </div> +<div align="center"> + <table class="format"> + <caption>Driver Info Message</caption> + + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr> + <td>Version</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + <tr> + <td colspan="4"><br />Driver Identification</td> + </tr> + + <tr> + <td colspan="2">Driver Information Size</td> + <td colspan="2" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + + <tr> + <td colspan="4"><br /> + <br />Driver Information <em>(variable size)</em><br /> + <br /> + <br /></td> + </tr> + + </table> +</div> <br /> -<h4><a name="AinfoMessage">IV.A.2.v. The Attribute Info -Message</a></h4> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> - <!-- start msgdesc table --> - <center> + <tr> + <td><p>Version</p></td> + <td><p>The version number for this message. This document + describes version 0.</p></td> + </tr> + + <tr> + <td><p>Driver Identification</p></td> + <td><p>This is an eight-byte ASCII string without null + termination which identifies the driver.</p></td> + </tr> + + <tr> + <td><p>Driver Information Size</p></td> + <td><p> + The size in bytes of the <em>Driver Information</em> field of this + message. + </p></td> + </tr> + + <tr> + <td><p>Driver Information</p></td> + <td><p>Driver information is stored in a format defined by + the file driver.</p></td> + </tr> + </table> +</div> + +<br /> +<h4> + <a name="AinfoMessage">IV.A.2.v. The Attribute Info Message</a> +</h4> + +<!-- start msgdesc table --> +<center> <table class="msgdesc"> - <tr><td colspan="2"><b>Header Message Name:</b> Attribute - Info</td></tr> - <tr><td colspan="2"><b>Header Message Type:</b> 0x0015</td></tr> - <tr><td colspan="2"><b>Length:</b> Varies</td></tr> - <tr><td colspan="2"><b>Status:</b> Optional; may not be - repeated.</td></tr> - <tr><td><b>Description:</b></td> - <td>This message stores information about the attributes on an - object, such as the maximum creation index for the attributes - created and the location of the attribute storage when the - attributes are stored “densely”.</td></tr> - <tr><td colspan="2"><b>Format of Data:</b> See the tables - below.</td></tr> - </table></center> - <!-- end msgdesc table --> - - <div align="center"> - <table class="format"> - <caption> - Attribute Info Message - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td>Version</td> - <td>Flags</td> - <td colspan="2">Maximum Creation Index <em>(optional)</em></td> - </tr> - <tr> - <td colspan="4"><br />Fractal Heap Address<sup>O</sup><br /><br /></td> - </tr> - <tr> - <td colspan="4"><br />Attribute Name v2 B-tree Address<sup>O</sup><br /><br /></td> - </tr> - <tr> - <td colspan="4"><br />Attribute Creation Order v2 B-tree Address<sup>O</sup> <em>(optional)</em><br /><br /></td> - </tr> + <tr> + <td colspan="2"><b>Header Message Name:</b> Attribute Info</td> + </tr> + <tr> + <td colspan="2"><b>Header Message Type:</b> 0x0015</td> + </tr> + <tr> + <td colspan="2"><b>Length:</b> Varies</td> + </tr> + <tr> + <td colspan="2"><b>Status:</b> Optional; may not be repeated.</td> + </tr> + <tr> + <td><b>Description:</b></td> + <td>This message stores information about the attributes on an + object, such as the maximum creation index for the attributes + created and the location of the attribute storage when the + attributes are stored “densely”.</td> + </tr> + <tr> + <td colspan="2"><b>Format of Data:</b> See the tables below.</td> + </tr> + </table> +</center> +<!-- end msgdesc table --> - </table> +<div align="center"> + <table class="format"> + <caption>Attribute Info Message</caption> - <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> - </table> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr> + <td>Version</td> + <td>Flags</td> + <td colspan="2">Maximum Creation Index <em>(optional)</em></td> + </tr> + <tr> + <td colspan="4"><br />Fractal Heap Address<sup>O</sup><br /> + <br /></td> + </tr> + <tr> + <td colspan="4"><br />Attribute Name v2 B-tree Address<sup>O</sup><br /> + <br /></td> + </tr> + <tr> + <td colspan="4"><br />Attribute Creation Order v2 B-tree + Address<sup>O</sup> <em>(optional)</em><br /> + <br /></td> + </tr> - </div> + </table> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version</p></td> - <td><p>The version number for this message. This document describes - version 0.</p> - </td> - </tr> - - <tr> - <td><p>Flags</p></td> - <td><p>This is the attribute index information flag with the - following definition: - - <table class="list"> - <tr> - <th width="20%" align="center">Bit</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>0</code></td> - <td>If set, creation order for attributes is tracked. - </td> - </tr> - <tr> - <td align="center"><code>1</code></td> - <td>If set, creation order for attributes is indexed. - </td> - </tr> - <tr> - <td align="center"><code>2-7</code></td> - <td>Reserved</td> - </tr> - </table></p> - - </td> - </tr> - - <tr> - <td><p>Maximum Creation Index</p></td> - <td><p>The is the maximum creation order index value for the - attributes on the object.</p> - <p>This field is present if bit 0 of <em>Flags</em> is set.</p> - </td> - </tr> - - <tr> - <td><p>Fractal Heap Address</p></td> - <td><p>This is the address of the fractal heap to store dense - attributes.</p> - </td> - </tr> - - <tr> - <td><p>Attribute Name v2 B-tree Address</p></td> - <td><p>This is the address of the version 2 B-tree to index the - names of densely stored attributes.</p> - </td> - </tr> - - <tr> - <td><p>Attribute Creation Order v2 B-tree Address</p></td> - <td><p>This is the address of the version 2 B-tree to index the - creation order of densely stored attributes.</p> - <p>This field is present if bit 1 of <em>Flags</em> is set.</p> - </td> - </tr> + <table class="note"> + <tr> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> + </table> - </table> - </div> +</div> <br /> -<h4><a name="RefCountMessage">IV.A.2.w. The Object Reference -Count Message</a></h4> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> - <!-- start msgdesc table --> - <center> + <tr> + <td><p>Version</p></td> + <td><p>The version number for this message. This document + describes version 0.</p></td> + </tr> + + <tr> + <td><p>Flags</p></td> + <td><p>This is the attribute index information flag with the + following definition:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Bit</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>0</code></td> + <td>If set, creation order for attributes is tracked.</td> + </tr> + <tr> + <td align="center"><code>1</code></td> + <td>If set, creation order for attributes is indexed.</td> + </tr> + <tr> + <td align="center"><code>2-7</code></td> + <td>Reserved</td> + </tr> + </table> + <p></p></td> + </tr> + + <tr> + <td><p>Maximum Creation Index</p></td> + <td><p>The is the maximum creation order index value for the + attributes on the object.</p> + <p> + This field is present if bit 0 of <em>Flags</em> is set. + </p></td> + </tr> + + <tr> + <td><p>Fractal Heap Address</p></td> + <td><p>This is the address of the fractal heap to store + dense attributes.</p></td> + </tr> + + <tr> + <td><p>Attribute Name v2 B-tree Address</p></td> + <td><p>This is the address of the version 2 B-tree to index + the names of densely stored attributes.</p></td> + </tr> + + <tr> + <td><p>Attribute Creation Order v2 B-tree Address</p></td> + <td><p>This is the address of the version 2 B-tree to index + the creation order of densely stored attributes.</p> + <p> + This field is present if bit 1 of <em>Flags</em> is set. + </p></td> + </tr> + + </table> +</div> + +<br /> +<h4> + <a name="RefCountMessage">IV.A.2.w. The Object Reference Count + Message</a> +</h4> + +<!-- start msgdesc table --> +<center> <table class="msgdesc"> - <tr><td colspan="2"><b>Header Message Name:</b> Object Reference - Count</td></tr> - <tr><td colspan="2"><b>Header Message Type:</b> 0x0016</td></tr> - <tr><td colspan="2"><b>Length:</b> Fixed</td></tr> - <tr><td colspan="2"><b>Status:</b> Optional; may not be - repeated.</td></tr> - <tr><td><b>Description:</b></td> - <td>This message stores the number of hard links (in groups or - objects) pointing to an object: in other words, its - <em>reference count</em>.</td></tr> - <tr><td colspan="2"><b>Format of Data:</b> See the tables - below.</td></tr> - </table></center> - <!-- end msgdesc table --> - - <div align="center"> - <table class="format"> - <caption> - Object Reference Count - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td>Version</td> - <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted only to align table nicely</em></td> - </tr> - - <tr> - <td colspan="4">Reference count</td> - </tr> - </table> - </div> + <tr> + <td colspan="2"><b>Header Message Name:</b> Object Reference + Count</td> + </tr> + <tr> + <td colspan="2"><b>Header Message Type:</b> 0x0016</td> + </tr> + <tr> + <td colspan="2"><b>Length:</b> Fixed</td> + </tr> + <tr> + <td colspan="2"><b>Status:</b> Optional; may not be repeated.</td> + </tr> + <tr> + <td><b>Description:</b></td> + <td>This message stores the number of hard links (in groups or + objects) pointing to an object: in other words, its <em>reference + count</em>. + </td> + </tr> + <tr> + <td colspan="2"><b>Format of Data:</b> See the tables below.</td> + </tr> + </table> +</center> +<!-- end msgdesc table --> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version</p></td> - <td><p>The version number for this message. This document describes - version 0.</p> - </td> - </tr> - - <tr> - <td><p>Reference Count</p></td> - <td><p>The unsigned 32-bit integer is the reference count for the - object. This message is only present in “version 2” - (or later) object headers, and if not present those object - header versions, the reference count for the object is assumed - to be 1.</p> - </td> - </tr> +<div align="center"> + <table class="format"> + <caption>Object Reference Count</caption> - </table> - </div> + <tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + + <tr> + <td>Version</td> + <td colspan="3" bgcolor="#DDDDDD"><em>This space inserted + only to align table nicely</em></td> + </tr> + + <tr> + <td colspan="4">Reference count</td> + </tr> + </table> +</div> <br /> -<h4><a name="FsinfoMessage">IV.A.2.x. The File Space Info -Message</a></h4> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> - <!-- start msgdesc table --> - <center> + <tr> + <td><p>Version</p></td> + <td><p>The version number for this message. This document + describes version 0.</p></td> + </tr> + + <tr> + <td><p>Reference Count</p></td> + <td><p>The unsigned 32-bit integer is the reference count + for the object. This message is only present in “version + 2” (or later) object headers, and if not present those object + header versions, the reference count for the object is assumed to + be 1.</p></td> + </tr> + + </table> +</div> + +<br /> +<h4> + <a name="FsinfoMessage">IV.A.2.x. The File Space Info Message</a> +</h4> + +<!-- start msgdesc table --> +<center> <table class="msgdesc"> - <tr><td colspan="2"><b>Header Message Name:</b> File Space - Info</td></tr> - <tr><td colspan="2"><b>Header Message Type:</b> 0x0018</td></tr> - <tr><td colspan="2"><b>Length:</b> Fixed</td></tr> - <tr><td colspan="2"><b>Status:</b> Optional; may not be - repeated.</td></tr> - <tr><td> - <b>Description:</b></td> - <td>This message stores the file space management strategy (see - description below) that the library uses in handling file space - request for the file. It also contains the free-space section - threshold used by the library’s free-space managers for - the file. If the strategy is 1, this message also contains the - addresses of the file’s free-space managers which track - free space for each type of file space allocation. There are - six basic types of file space allocation: superblock, B-tree, - raw data, global heap, local heap, and object header. See the - description of <a href="#FreeSpaceManager">Free-space - Manager</a> as well the description of allocation types in - <a href="#AppendixB">Appendix B</a>.</td></tr> - <tr><td colspan="2"><b>Format of Data:</b> See the tables - below.</td></tr> - </table></center> - <!-- end msgdesc table --> - - <div align="center"> - <table class="format"> - <caption> - File Space Info - </caption> - - <tr> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - <th width="25%">byte</th> - </tr> - - <tr> - <td>Version</td> - <td>Strategy</td> - <td colspan="2">Threshold<sup>L</sup></td> - </tr> - <tr> - <td colspan="4">Super-block Free-space Manager Address<sup>O</sup></td> - </tr> - <tr> - <td colspan="4">B-tree Free-space Manager Address<sup>O</sup></td> - </tr> - <tr> - <td colspan="4">Raw Data Free-space Manager Address<sup>O</sup></td> - </tr> - <tr> - <td colspan="4">Global Heap Free-space Manager Address<sup>O</sup></td> - </tr> - <tr> - <td colspan="4">Local Heap Free-space Manager Address<sup>O</sup></td> - </tr> - <tr> - <td colspan="4">Object Header Free-space Manager Address<sup>O</sup></td> - </tr> - </table> + <tr> + <td colspan="2"><b>Header Message Name:</b> File Space Info</td> + </tr> + <tr> + <td colspan="2"><b>Header Message Type:</b> 0x0018</td> + </tr> + <tr> + <td colspan="2"><b>Length:</b> Fixed</td> + </tr> + <tr> + <td colspan="2"><b>Status:</b> Optional; may not be repeated.</td> + </tr> + <tr> + <td><b>Description:</b></td> + <td>This message stores the file space management strategy (see + description below) that the library uses in handling file space + request for the file. It also contains the free-space section + threshold used by the library’s free-space managers for the + file. If the strategy is 1, this message also contains the addresses + of the file’s free-space managers which track free space for + each type of file space allocation. There are six basic types of + file space allocation: superblock, B-tree, raw data, global heap, + local heap, and object header. See the description of <a + href="#FreeSpaceManager">Free-space Manager</a> as well the + description of allocation types in <a href="#AppendixB">Appendix + B</a>. + </td> + </tr> + <tr> + <td colspan="2"><b>Format of Data:</b> See the tables below.</td> + </tr> + </table> +</center> +<!-- end msgdesc table --> + +<div align="center"> + <table class="format"> + <caption>File Space Info</caption> - <table class="note"> <tr> - <td width="60%"> </td> - <td width="40%"> - (Items marked with an ‘O’ in the above table are of the size - specified in “Size of Offsets” field in the superblock.) - </td></tr> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + <th width="25%">byte</th> + </tr> + <tr> - <td> </td> - <td> - (Items marked with an ‘L’ in the above table are of the size - specified in “Size of Lengths” field in the superblock.) - </td></tr> - </table> + <td>Version</td> + <td>Strategy</td> + <td colspan="2">Threshold<sup>L</sup></td> + </tr> + <tr> + <td colspan="4">Super-block Free-space Manager Address<sup>O</sup></td> + </tr> + <tr> + <td colspan="4">B-tree Free-space Manager Address<sup>O</sup></td> + </tr> + <tr> + <td colspan="4">Raw Data Free-space Manager Address<sup>O</sup></td> + </tr> + <tr> + <td colspan="4">Global Heap Free-space Manager Address<sup>O</sup></td> + </tr> + <tr> + <td colspan="4">Local Heap Free-space Manager Address<sup>O</sup></td> + </tr> + <tr> + <td colspan="4">Object Header Free-space Manager Address<sup>O</sup></td> + </tr> + </table> + + <table class="note"> + <tr> + <td width="60%"> </td> + <td width="40%">(Items marked with an ‘O’ in the + above table are of the size specified in “Size of + Offsets” field in the superblock.)</td> + </tr> + <tr> + <td> </td> + <td>(Items marked with an ‘L’ in the above table are + of the size specified in “Size of Lengths” field in the + superblock.)</td> + </tr> + </table> - </div> +</div> - <br /> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Field Name</th> - <th>Description</th> - </tr> - - <tr> - <td><p>Version</p></td> - <td><p>This is the version number of this message. This document describes - version 0.</p> - </td> - </tr> - - <tr> - <td><p>Strategy</p></td> - <td><p>This is the file space management strategy for the file. - There are four types of strategies: - <table class="list"> - <tr> - <th width="20%" align="center">Value</th> - <th width="80%" align="left">Description</th> - </tr> - - <tr> - <td align="center"><code>1</code></td> - <td>With this strategy, the HDF5 Library’s free-space managers track the - free space that results from the manipulation of HDF5 objects - in the HDF5 file. The free space information is saved when the - file is closed, and reloaded when the file is reopened. - <br /> - When space is needed for file metadata or raw data, - the HDF5 Library first requests space from the library’s free-space - managers. If the request is not satisfied, the library requests space - from the aggregators. If the request is still not satisfied, - the library requests space from the virtual file driver. - That is, the library will use all of the mechanisms for allocating - space. - </td> - </tr> - - <tr> - <td align="center"><code>2</code></td> - <td>This is the HDF5 Library’s default file space management strategy. - With this strategy, the library’s free-space managers track the free space - that results from the manipulation of HDF5 objects in the HDF5 file. - The free space information is NOT saved when the file is closed and - the free space that exists upon file closing becomes unaccounted - space in the file. - <br /> - As with strategy #1, the library will try all of the mechanisms - for allocating space. When space is needed for file metadata or - raw data, the library first requests space from the free-space - managers. If the request is not satisfied, the library requests - space from the aggregators. If the request is still not satisfied, - the library requests space from the virtual file driver. - </td> - </tr> - - <tr> - <td align="center"><code>3</code></td> - <td>With this strategy, the HDF5 Library does not track free space that results - from the manipulation of HDF5 objects in the HDF5 file and - the free space becomes unaccounted space in the file. - <br /> - When space is needed for file metadata or raw data, - the library first requests space from the aggregators. - If the request is not satisfied, the library requests space from - the virtual file driver. - </td> - </tr> - <tr> - <td align="center"><code>4</code></td> - <td>With this strategy, the HDF5 Library does not track free space that results - from the manipulation of HDF5 objects in the HDF5 file and - the free space becomes unaccounted space in the file. - <br /> - When space is needed for file metadata or raw data, - the library requests space from the virtual file driver. - </td> - </tr> - </table></p> - </td> - </tr> - - <tr> - <td><p>Threshold</p></td> - <td><p>This is the free-space section threshold. - The library’s free-space managers will track only - free-space sections with size greater than or equal to - <em>threshold</em>. The default is to track free-space - sections of all sizes.</p> - </td> - </tr> - <tr> - <td><p>Superblock Free-space Manager Address</p></td> - <td><p>This is the address of the free-space manager for - H5FD_MEM_SUPER allocation type. - </p> - </td> - </tr> - - <tr> - <td><p>B-tree Free-space Manager Address</p></td> - <td><p>This is the address of the free-space manager for - H5FD_MEM_BTREE allocation type. - </p> - </td> - </tr> - - <tr> - <td><p>Raw Data Free-space Manager Address</p></td> - <td><p>This is the address of the free-space manager for - H5FD_MEM_DRAW allocation type. - </p> - </td> - </tr> - - <tr> - <td><p>Global Heap Free-space Manager Address</p></td> - <td><p>This is the address of the free-space manager for - H5FD_MEM_GHEAP allocation type. - </p> - </td> - </tr> - - <tr> - <td><p>Local Heap Free-space Manager Address</p></td> - <td><p>This is the address of the free-space manager for - H5FD_MEM_LHEAP allocation type. - </p> - </td> - </tr> - - <tr> - <td><p>Object Header Free-space Manager Address</p></td> - <td><p>This is the address of the free-space manager for - H5FD_MEM_OHDR allocation type. - </p> - </td> - </tr> - </table> - </div> - <br /> +<br /> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Field Name</th> + <th>Description</th> + </tr> + + <tr> + <td><p>Version</p></td> + <td><p>This is the version number of this message. This + document describes version 0.</p></td> + </tr> + + <tr> + <td><p>Strategy</p></td> + <td><p>This is the file space management strategy for the + file. There are four types of strategies:</p> + <table class="list"> + <tr> + <th width="20%" align="center">Value</th> + <th width="80%" align="left">Description</th> + </tr> + + <tr> + <td align="center"><code>1</code></td> + <td>With this strategy, the HDF5 Library’s free-space + managers track the free space that results from the manipulation + of HDF5 objects in the HDF5 file. The free space information is + saved when the file is closed, and reloaded when the file is + reopened. <br /> When space is needed for file metadata or raw + data, the HDF5 Library first requests space from the + library’s free-space managers. If the request is not + satisfied, the library requests space from the aggregators. If + the request is still not satisfied, the library requests space + from the virtual file driver. That is, the library will use all + of the mechanisms for allocating space. + </td> + </tr> + + <tr> + <td align="center"><code>2</code></td> + <td>This is the HDF5 Library’s default file space + management strategy. With this strategy, the library’s + free-space managers track the free space that results from the + manipulation of HDF5 objects in the HDF5 file. The free space + information is NOT saved when the file is closed and the free + space that exists upon file closing becomes unaccounted space in + the file. <br /> As with strategy #1, the library will try all + of the mechanisms for allocating space. When space is needed for + file metadata or raw data, the library first requests space from + the free-space managers. If the request is not satisfied, the + library requests space from the aggregators. If the request is + still not satisfied, the library requests space from the virtual + file driver. + </td> + </tr> + + <tr> + <td align="center"><code>3</code></td> + <td>With this strategy, the HDF5 Library does not track free + space that results from the manipulation of HDF5 objects in the + HDF5 file and the free space becomes unaccounted space in the + file. <br /> When space is needed for file metadata or raw data, + the library first requests space from the aggregators. If the + request is not satisfied, the library requests space from the + virtual file driver. + </td> + </tr> + <tr> + <td align="center"><code>4</code></td> + <td>With this strategy, the HDF5 Library does not track free + space that results from the manipulation of HDF5 objects in the + HDF5 file and the free space becomes unaccounted space in the + file. <br /> When space is needed for file metadata or raw data, + the library requests space from the virtual file driver. + </td> + </tr> + </table> + <p></p></td> + </tr> + + <tr> + <td><p>Threshold</p></td> + <td><p> + This is the free-space section threshold. The library’s + free-space managers will track only free-space sections with size + greater than or equal to <em>threshold</em>. The default is to + track free-space sections of all sizes. + </p></td> + </tr> + <tr> + <td><p>Superblock Free-space Manager Address</p></td> + <td><p>This is the address of the free-space manager for + H5FD_MEM_SUPER allocation type.</p></td> + </tr> + + <tr> + <td><p>B-tree Free-space Manager Address</p></td> + <td><p>This is the address of the free-space manager for + H5FD_MEM_BTREE allocation type.</p></td> + </tr> + + <tr> + <td><p>Raw Data Free-space Manager Address</p></td> + <td><p>This is the address of the free-space manager for + H5FD_MEM_DRAW allocation type.</p></td> + </tr> + + <tr> + <td><p>Global Heap Free-space Manager Address</p></td> + <td><p>This is the address of the free-space manager for + H5FD_MEM_GHEAP allocation type.</p></td> + </tr> + + <tr> + <td><p>Local Heap Free-space Manager Address</p></td> + <td><p>This is the address of the free-space manager for + H5FD_MEM_LHEAP allocation type.</p></td> + </tr> + + <tr> + <td><p>Object Header Free-space Manager Address</p></td> + <td><p>This is the address of the free-space manager for + H5FD_MEM_OHDR allocation type.</p></td> + </tr> + </table> +</div> +<br /> <br /> -<h3><a name="DataStorage"> -IV.B. Disk Format: Level 2B - Data Object Data Storage</a></h3> +<h3> + <a name="DataStorage"> IV.B. Disk Format: Level 2B - Data Object + Data Storage</a> +</h3> <p>The data for an object is stored separately from its header - information in the file and may not actually be located in the HDF5 file - itself if the header indicates that the data is stored externally. The - information for each record in the object is stored according to the - dimensionality of the object (indicated in the dataspace header message). - Multi-dimensional array data is stored in C order; in other words, the - “last” dimension changes fastest.</p> - -<p>Data whose elements are composed of atomic datatypes are stored in IEEE - format, unless they are specifically defined as being stored in a different - machine format with the architecture-type information from the datatype - header message. This means that each architecture will need to [potentially] - byte-swap data values into the internal representation for that particular - machine.</p> - -<p> Data with a variable-length datatype is stored in the global heap - of the HDF5 file. Global heap identifiers are stored in the - data object storage.</p> - -<p>Data whose elements are composed of reference datatypes are stored in - several different ways depending on the particular reference type involved. - Object pointers are just stored as the offset of the object header being - pointed to with the size of the pointer being the same number of bytes as - offsets in the file.</p> + information in the file and may not actually be located in the HDF5 + file itself if the header indicates that the data is stored externally. + The information for each record in the object is stored according to + the dimensionality of the object (indicated in the dataspace header + message). Multi-dimensional array data is stored in C order; in other + words, the “last” dimension changes fastest.</p> + +<p>Data whose elements are composed of atomic datatypes are stored + in IEEE format, unless they are specifically defined as being stored in + a different machine format with the architecture-type information from + the datatype header message. This means that each architecture will + need to [potentially] byte-swap data values into the internal + representation for that particular machine.</p> + +<p>Data with a variable-length datatype is stored in the global heap + of the HDF5 file. Global heap identifiers are stored in the data object + storage.</p> + +<p>Data whose elements are composed of reference datatypes are + stored in several different ways depending on the particular reference + type involved. Object pointers are just stored as the offset of the + object header being pointed to with the size of the pointer being the + same number of bytes as offsets in the file.</p> <p>Dataset region references are stored as a heap-ID which points to -the following information within the file-heap: an offset of the object -pointed to, number-type information (same format as header message), -dimensionality information (same format as header message), sub-set start -and end information (in other words, a coordinate location for each), -and field start and end names (in other words, a [pointer to the] string -indicating the first field included and a [pointer to the] string name -for the last field). </p> + the following information within the file-heap: an offset of the object + pointed to, number-type information (same format as header message), + dimensionality information (same format as header message), sub-set + start and end information (in other words, a coordinate location for + each), and field start and end names (in other words, a [pointer to + the] string indicating the first field included and a [pointer to the] + string name for the last field).</p> -<p>Data of a compound datatype is stored as a contiguous stream of the items - in the structure, with each item formatted according to its datatype.</p> +<p>Data of a compound datatype is stored as a contiguous stream of + the items in the structure, with each item formatted according to its + datatype.</p> <br /> <br /> <hr /> -<h2><a name="AppendixA"> -V. Appendix A: Definitions</a></h2> +<h2> + <a name="AppendixA"> V. Appendix A: Definitions</a> +</h2> -<p>Definitions of various terms used in this document are included in -this section.</p> +<p>Definitions of various terms used in this document are included + in this section.</p> - <div align="center"> +<div align="center"> <table class="glossary"> - <tr> - <th width="20%">Term</th> - <th>Definition</th> - </tr> + <tr> + <th width="20%">Term</th> + <th>Definition</th> + </tr> - <tr> - <td>Undefined Address</td> - <td>The <a name="UndefinedAddress">undefined - address</a> for a file is a file address with all bits - set: in other words, <code>0xffff...ff</code>.</td> - </tr> + <tr> + <td>Undefined Address</td> + <td>The <a name="UndefinedAddress">undefined address</a> for a + file is a file address with all bits set: in other words, <code>0xffff...ff</code>. + </td> + </tr> - <tr> - <td>Unlimited Size</td> - <td>The <a name="UnlimitedDim">unlimited size</a> - for a size is a value with all bits set: in other words, - <code>0xffff...ff</code>.</td> - </tr> + <tr> + <td>Unlimited Size</td> + <td>The <a name="UnlimitedDim">unlimited size</a> for a size is + a value with all bits set: in other words, <code>0xffff...ff</code>. + </td> + </tr> </table> - </div> +</div> <br /> <br /> <hr /> -<h2><a name="AppendixB"> -VI. Appendix B: File Memory Allocation Types</a></h2> +<h2> + <a name="AppendixB"> VI. Appendix B: File Memory Allocation Types</a> +</h2> -<p>There are six basic types of file memory allocation as follows: -</p> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Basic Allocation Type</th> - <th>Description</th> - </tr> - - <tr> - <td>H5FD_MEM_SUPER</td> - <td>File memory allocated for <em>Superblock.</em></td> - </tr> - - <tr> - <td>H5FD_MEM_BTREE</td> - <td>File memory allocated for <em>B-tree.</em></td> - </tr> - - <tr> - <td>H5FD_MEM_DRAW</td> - <td>File memory allocated for raw data.</td> - </tr> - - <tr> - <td>H5FD_MEM_GHEAP</td> - <td>File memory allocated for <em>Global Heap.</em></td> - </tr> - - <tr> - <td>H5FD_MEM_LHEAP</td> - <td>File memory allocated for <em>Local Heap.</em></td> - </tr> - - <tr> - <td>H5FD_MEM_OHDR</td> - <td>File memory allocated for <em>Object Header.</em></td> - </tr> - </table> - </div> +<p>There are six basic types of file memory allocation as follows:</p> +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Basic Allocation Type</th> + <th>Description</th> + </tr> -<p>There are other file memory allocation types that are mapped to the -above six basic allocation types because they are similar in nature. -The mapping is listed in the following table: -</p> + <tr> + <td>H5FD_MEM_SUPER</td> + <td>File memory allocated for <em>Superblock.</em></td> + </tr> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Basic Allocation Type</th> - <th>Mapping of Allocation Types to Basic Allocation Types</th> - </tr> - - <tr> - <td>H5FD_MEM_SUPER</td> - <td><em>none</em></td> - </tr> - - <tr> - <td>H5FD_MEM_BTREE</td> - <td>H5FD_MEM_SOHM_INDEX</td> - </tr> - - <tr> - <td>H5FD_MEM_DRAW</td> - <td>H5FD_MEM_FHEAP_HUGE_OBJ</td> - </tr> - - <tr> - <td>H5FD_MEM_GHEAP</td> - <td><em>none</em></td> - </tr> - - <tr> - <td>H5FD_MEM_LHEAP</td> - <td>H5FD_MEM_FHEAP_DBLOCK, H5FD_MEM_FSPACE_SINFO</td> - </tr> - - <tr> - <td>H5FD_MEM_OHDR</td> - <td>H5FD_MEM_FHEAP_HDR, H5FD_MEM_FHEAP_IBLOCK, H5FD_MEM_FSPACE_HDR, H5FD_MEM_SOHM_TABLE</td> - </tr> - </table> - </div> + <tr> + <td>H5FD_MEM_BTREE</td> + <td>File memory allocated for <em>B-tree.</em></td> + </tr> -<p>Allocation types that are mapped to basic allocation types are described below: -</p> + <tr> + <td>H5FD_MEM_DRAW</td> + <td>File memory allocated for raw data.</td> + </tr> - <div align="center"> - <table class="desc"> - <tr> - <th width="30%">Allocation Type</th> - <th>Description</th> - </tr> - - <tr> - <td>H5FD_MEM_FHEAP_HDR</td> - <td>File memory allocated for <em>Fractal Heap Header.</em></td> - </tr> - - <tr> - <td>H5FD_MEM_FHEAP_DBLOCK</td> - <td>File memory allocated for <em>Fractal Heap Direct Blocks.</em></td> - </tr> - - <tr> - <td>H5FD_MEM_FHEAP_IBLOCK</td> - <td>File memory allocated for <em>Fractal Heap Indirect Blocks.</em></td> - </tr> - - <tr> - <td>H5FD_MEM_FHEAP_HUGE_OBJ</td> - <td>File memory allocated for huge objects in the fractal heap.</td> - </tr> - - <tr> - <td>H5FD_MEM_FSPACE_HDR</td> - <td>File memory allocated for <em>Free-space Manager Header.</em></td> - </tr> - - <tr> - <td>H5FD_MEM_FSPACE_SINFO</td> - <td>File memory allocated for <em>Free-space Section List</em> of the free-space manager.</td> - </tr> - <tr> - <td>H5FD_MEM_SOHM_TABLE</td> - <td>File memory allocated for <em>Shared Object Header Message Table.</em></td> - </tr> - <tr> - <td>H5FD_MEM_SOHM_INDEX</td> - <td>File memory allocated for <em>Shared Message Record List.</em></td> - </tr> - </table> - </div> -</body> + <tr> + <td>H5FD_MEM_GHEAP</td> + <td>File memory allocated for <em>Global Heap.</em></td> + </tr> + + <tr> + <td>H5FD_MEM_LHEAP</td> + <td>File memory allocated for <em>Local Heap.</em></td> + </tr> + + <tr> + <td>H5FD_MEM_OHDR</td> + <td>File memory allocated for <em>Object Header.</em></td> + </tr> + </table> +</div> + +<p>There are other file memory allocation types that are mapped to + the above six basic allocation types because they are similar in + nature. The mapping is listed in the following table:</p> + +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Basic Allocation Type</th> + <th>Mapping of Allocation Types to Basic Allocation Types</th> + </tr> + + <tr> + <td>H5FD_MEM_SUPER</td> + <td><em>none</em></td> + </tr> + + <tr> + <td>H5FD_MEM_BTREE</td> + <td>H5FD_MEM_SOHM_INDEX</td> + </tr> + + <tr> + <td>H5FD_MEM_DRAW</td> + <td>H5FD_MEM_FHEAP_HUGE_OBJ</td> + </tr> + + <tr> + <td>H5FD_MEM_GHEAP</td> + <td><em>none</em></td> + </tr> + + <tr> + <td>H5FD_MEM_LHEAP</td> + <td>H5FD_MEM_FHEAP_DBLOCK, H5FD_MEM_FSPACE_SINFO</td> + </tr> + + <tr> + <td>H5FD_MEM_OHDR</td> + <td>H5FD_MEM_FHEAP_HDR, H5FD_MEM_FHEAP_IBLOCK, + H5FD_MEM_FSPACE_HDR, H5FD_MEM_SOHM_TABLE</td> + </tr> + </table> +</div> + +<p>Allocation types that are mapped to basic allocation types are + described below:</p> + +<div align="center"> + <table class="desc"> + <tr> + <th width="30%">Allocation Type</th> + <th>Description</th> + </tr> + + <tr> + <td>H5FD_MEM_FHEAP_HDR</td> + <td>File memory allocated for <em>Fractal Heap Header.</em></td> + </tr> + + <tr> + <td>H5FD_MEM_FHEAP_DBLOCK</td> + <td>File memory allocated for <em>Fractal Heap Direct + Blocks.</em></td> + </tr> + + <tr> + <td>H5FD_MEM_FHEAP_IBLOCK</td> + <td>File memory allocated for <em>Fractal Heap Indirect + Blocks.</em></td> + </tr> + + <tr> + <td>H5FD_MEM_FHEAP_HUGE_OBJ</td> + <td>File memory allocated for huge objects in the fractal heap.</td> + </tr> + + <tr> + <td>H5FD_MEM_FSPACE_HDR</td> + <td>File memory allocated for <em>Free-space Manager + Header.</em></td> + </tr> + + <tr> + <td>H5FD_MEM_FSPACE_SINFO</td> + <td>File memory allocated for <em>Free-space Section List</em> + of the free-space manager. + </td> + </tr> + <tr> + <td>H5FD_MEM_SOHM_TABLE</td> + <td>File memory allocated for <em>Shared Object Header + Message Table.</em></td> + </tr> + <tr> + <td>H5FD_MEM_SOHM_INDEX</td> + <td>File memory allocated for <em>Shared Message Record + List.</em></td> + </tr> + </table> +</div> +</head> +<body></body> </html> diff --git a/doxygen/examples/H5.format.html b/doxygen/examples/H5.format.html index 378f7a3..c52e8ea 100644 --- a/doxygen/examples/H5.format.html +++ b/doxygen/examples/H5.format.html @@ -170,17 +170,14 @@ <!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * - * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the files COPYING and Copyright.html. COPYING can be found at the root * - * of the source code distribution tree; Copyright.html can be found at the * - * root level of an installed copy of the electronic HDF5 document set and * - * is linked from the top-level documents page. It can also be found at * - * http://www.hdfgroup.org/HDF5/doc/Copyright.html. If you do not have * - * access to either file, you may request a copy from help@hdfgroup.org. * + * the COPYING file, which can be found at the root of the source code * + * distribution tree, or in https://www.hdfgroup.org/licenses. * + * If you do not have access to either file, you may request a copy from * + * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * --> <!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/NavBar_ADevG.lbi" --> @@ -14647,9 +14644,9 @@ Data Layout message. datatypes).</p> <p>In 1.8.x versions of the library, attributes can be larger than 64KB. See the - <a href="UG/HDF5_User_Guide-Responsive%20HTML5/index.html#t=HDF5_User_Guide%2FAttributes%2FHDF5_Attributes.htm%3Frhtocid%3Dtoc8.2_1%23TOC_8_5_Special_Issuesbc-13"> + <a href="UG/HDF5_Users_Guide-Responsive%20HTML5/index.html#t=HDF5_Users_Guide%2FAttributes%2FHDF5_Attributes.htm%3Frhtocid%3Dtoc8.2_1%23TOC_8_5_Special_Issuesbc-13"> “Special Issues”</a> section of the Attributes chapter - in the <cite>HDF5 User Guide</cite> for more information.</p> + in the <cite>HDF5 User’s Guide</cite> for more information.</p> <p>Note: Attributes on an object must have unique names: the HDF5 Library currently enforces this by causing the creation of an attribute with a duplicate name to fail. @@ -19601,7 +19598,7 @@ disk address for the chunk.</p> </tr> <tr> <td align="center"><code>0</code></td> - <td>If set, it a a regular hyperslab, otherwise, irregular. + <td>If set, it is a regular hyperslab, otherwise, irregular. </td> </tr> diff --git a/doxygen/examples/VFL.html b/doxygen/examples/VFL.html index 624d942..78d1632 100644 --- a/doxygen/examples/VFL.html +++ b/doxygen/examples/VFL.html @@ -10,17 +10,14 @@ <!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * - * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the files COPYING and Copyright.html. COPYING can be found at the root * - * of the source code distribution tree; Copyright.html can be found at the * - * root level of an installed copy of the electronic HDF5 document set and * - * is linked from the top-level documents page. It can also be found at * - * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have * - * access to either file, you may request a copy from help@hdfgroup.org. * + * the COPYING file, which can be found at the root of the source code * + * distribution tree, or in https://www.hdfgroup.org/licenses. * + * If you do not have access to either file, you may request a copy from * + * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * --> diff --git a/doxygen/examples/core_menu.md b/doxygen/examples/menus/core_menu.md index 1379f18..3fd7d11 100644 --- a/doxygen/examples/core_menu.md +++ b/doxygen/examples/menus/core_menu.md @@ -20,6 +20,10 @@ HDF5 datatypes describe the element type of HDF5 datasets and attributes. <br /> HDF5 library error reporting. +- @ref H5ES "Event Set (H5ES)" +<br /> +HDF5 event set life cycle used with HDF5 VOL connectors that enable the asynchronous feature in HDF5. + - @ref H5F "Files (H5F)" <br /> Manage HDF5 files. @@ -59,3 +63,7 @@ Manage the loading behavior of HDF5 plugins. - @ref H5R "References (H5R)" <br /> Manage HDF5 references (HDF5 objects, attributes, and selections on datasets a.k.a. dataset regions). + +- @ref H5VL "VOL Connector (H5VL)" +<br /> +Manage HDF5 VOL connector plugins. diff --git a/doxygen/examples/fortran_menu.md b/doxygen/examples/menus/fortran_menu.md index 8ef4ead..8ef4ead 100644 --- a/doxygen/examples/fortran_menu.md +++ b/doxygen/examples/menus/fortran_menu.md diff --git a/doxygen/examples/high_level_menu.md b/doxygen/examples/menus/high_level_menu.md index d209bf4..d209bf4 100644 --- a/doxygen/examples/high_level_menu.md +++ b/doxygen/examples/menus/high_level_menu.md diff --git a/doxygen/examples/java_menu.md b/doxygen/examples/menus/java_menu.md index bec7d4e..1236838 100644 --- a/doxygen/examples/java_menu.md +++ b/doxygen/examples/menus/java_menu.md @@ -61,6 +61,10 @@ This package is the Java interface for the HDF5 library plugin APIs. <br /> This package is the Java interface for the HDF5 library reference APIs. +- @ref JH5VL +<br /> +This package is the Java interface for the HDF5 library VOL connector APIs. + - @ref HDF5CONST <br /> This class contains C constants and enumerated types of HDF5 library. diff --git a/doxygen/examples/tables/fileDriverLists.dox b/doxygen/examples/tables/fileDriverLists.dox new file mode 100644 index 0000000..1aae3ce --- /dev/null +++ b/doxygen/examples/tables/fileDriverLists.dox @@ -0,0 +1,139 @@ +/** File Driver List + * +//! [file_driver_table] +<table> +<caption>I/O file drivers</caption> +<tr> +<th>File Driver</th> +<th>Description</th> +</tr> +<tr> +<td>#H5FD_CORE</td> +<td>Store in memory (optional backing store to disk file).</td> +</tr> +<tr> +<td>#H5FD_FAMILY</td> +<td>Store in a set of files.</td> +</tr> +<tr> +<td>#H5FD_LOG</td> +<td>Store in logging file.</td> +</tr> +<tr> +<td>#H5FD_MPIO</td> +<td>Store using MPI/IO.</td> +</tr> +<tr> +<td>#H5FD_MULTI</td> +<td>Store in multiple files. There are several options to control layout.</td> +</tr> +<tr> +<td>#H5FD_SEC2</td> +<td>Serial I/O to file using Unix “section 2” functions.</td> +</tr> +<tr> +<td>#H5FD_STDIO</td> +<td>Serial I/O to file using Unix “stdio” functions.</td> +</tr> +</table> +//! [file_driver_table] + * + * +//! [supported_file_driver_table] +<table> +<caption id="table_file_drivers">Supported file drivers</caption> +<tr> +<th>Driver Name</th> +<th>Driver Identifier</th> +<th>Description</th> +<th>Related API</th> +</tr> +<tr> +<td>POSIX</td> +<td>#H5FD_SEC2</td> +<td>This driver uses POSIX file-system functions like read and write to perform I/O to a single, +permanent file on local disk with no system buffering. This driver is POSIX-compliant and is +the default file driver for all systems.</td> +<td>#H5Pset_fapl_sec2</td> +</tr> +<tr> +<td>Direct</td> +<td>#H5FD_DIRECT</td> +<td>This is the #H5FD_SEC2 driver except data is written to or read from the file +synchronously without being cached by the system.</td> +<td>#H5Pset_fapl_direct</td> +</tr> +<tr> +<td>Log</td> +<td>#H5FD_LOG</td> +<td>This is the #H5FD_SEC2 driver with logging capabilities.</td> +<td>#H5Pset_fapl_log</td> +</tr> +<tr> +<td>Windows</td> +<td>#H5FD_WINDOWS</td> +<td>This driver was modified in HDF5-1.8.8 to be a wrapper of the POSIX driver, +#H5FD_SEC2. This change should not affect user applications.</td> +<td>#H5Pset_fapl_windows</td> +</tr> +<tr> +<td>STDIO</td> +<td>#H5FD_STDIO</td> +<td>This driver uses functions from the standard C stdio.h to perform I/O +to a single, permanent file on local disk with additional system buffering.</td> +<td>#H5Pset_fapl_stdio</td> +</tr> +<tr> +<td>Memory</td> +<td>#H5FD_CORE</td> +<td>With this driver, an application can work with a file in memory for faster reads and +writes. File contents are kept in memory until the file is closed. At closing, the memory +version of the file can be written back to disk or abandoned.</td> +<td>#H5Pset_fapl_core</td> +</tr> +<tr> +<td>Family</td> +<td>#H5FD_FAMILY</td> +<td>With this driver, the HDF5 file’s address space is partitioned into pieces and sent to +separate storage files using an underlying driver of the user’s choice. This driver is for +systems that do not support files larger than 2 gigabytes.</td> +<td>#H5Pset_fapl_family</td> +</tr> +<tr> +<td>Multi</td> +<td>#H5FD_MULTI</td> +<td>With this driver, data can be stored in multiple files according to the type of the data. +I/O might work better if data is stored in separate files based on the type of data. The Split +driver is a special case of this driver.</td> +<td>#H5Pset_fapl_multi</td> +</tr> +<tr> +<td>Split</td> +<td>H5FD_SPLIT</td> +<td>This file driver splits a file into two parts. One part stores metadata, and the other part +stores raw data. This splitting a file into two parts is a limited case of the Multi driver.</td> +<td>#H5Pset_fapl_split</td> +</tr> +<tr> +<td>Parallel</td> +<td>#H5FD_MPIO</td> +<td>This is the standard HDF5 file driver for parallel file systems. This driver uses the MPI +standard for both communication and file I/O.</td> +<td>#H5Pset_fapl_mpio</td> +</tr> +<tr> +<td>Parallel POSIX</td> +<td>H5FD_MPIPOSIX</td> +<td>This driver is no longer available</td> +<td></td> +</tr> +<tr> +<td>Stream</td> +<td>H5FD_STREAM</td> +<td>This driver is no longer available.</td> +<td></td> +</tr> +</table> +//! [supported_file_driver_table] + * + */ diff --git a/doxygen/examples/tables/predefinedDatatypes.dox b/doxygen/examples/tables/predefinedDatatypes.dox new file mode 100644 index 0000000..1deb882 --- /dev/null +++ b/doxygen/examples/tables/predefinedDatatypes.dox @@ -0,0 +1,625 @@ +/** Predefined Datatypes List + * +//! [predefined_ieee_datatypes_table] +<table> +<caption>Predefined IEEE Floating Point Datatypes</caption> +<tr> +<th>Datatype</th> +<th>Description</th> +</tr> +<tr> +<td>#H5T_IEEE_F32BE</td> +<td>32-bit big-endian IEEE floating point</td> +</tr> +<tr> +<td>#H5T_IEEE_F32LE</td> +<td>32-bit little-endian IEEE floating point</td> +</tr> +<tr> +<td>#H5T_IEEE_F64BE</td> +<td>64-bit big-endian IEEE floating point</td> +</tr> +<tr> +<td>#H5T_IEEE_F64LE</td> +<td>64-bit little-endian IEEE floating point</td> +</tr> +</table> +//! [predefined_ieee_datatypes_table] + * + * +//! [predefined_std_datatypes_table] +<table> +<caption>Predefined Standard Datatypes</caption> +<tr> +<th>Datatype</th> +<th>Description</th> +</tr> +<tr> +<td>#H5T_STD_I8BE</td> +<td>8-bit big-endian signed integer (2's complement)</td> +</tr> +<tr> +<td>#H5T_STD_I8LE</td> +<td>8-bit little-endian signed integer (2's complement)</td> +</tr> +<tr> +<td>#H5T_STD_I16BE</td> +<td>16-bit big-endian signed integer (2's complement)</td> +</tr> +<tr> +<td>#H5T_STD_I16LE</td> +<td>16-bit little-endian signed integer (2's complement)</td> +</tr> +<tr> +<td>#H5T_STD_I32BE</td> +<td>32-bit big-endian signed integer (2's complement)</td> +</tr> +<tr> +<td>#H5T_STD_I32LE</td> +<td>32-bit little-endian signed integer (2's complement)</td> +</tr> +<tr> +<td>#H5T_STD_I64BE</td> +<td>64-bit big-endian signed integer (2's complement)</td> +</tr> +<tr> +<td>#H5T_STD_I64LE</td> +<td>64-bit little-endian signed integer (2's complement)</td> +</tr> +<tr> +<td>#H5T_STD_U8BE</td> +<td>8-bit big-endian unsigned integer</td> +</tr> +<tr> +<td>#H5T_STD_U8LE</td> +<td>8-bit little-endian unsigned integer</td> +</tr> +<tr> +<td>#H5T_STD_U16BE</td> +<td>16-bit big-endian unsigned integer</td> +</tr> +<tr> +<td>#H5T_STD_U16LE</td> +<td>16-bit little-endian unsigned integer</td> +</tr> +<tr> +<td>#H5T_STD_U32BE</td> +<td>32-bit big-endian unsigned integer</td> +</tr> +<tr> +<td>#H5T_STD_U32LE</td> +<td>32-bit little-endian unsigned integer</td> +</tr> +<tr> +<td>#H5T_STD_U64BE</td> +<td>64-bit big-endian unsigned integer</td> +</tr> +<tr> +<td>#H5T_STD_U64LE</td> +<td>64-bit little-endian unsigned integer</td> +</tr> +<tr> +<td>#H5T_STD_B8BE</td> +<td>8-bit big-endian bitfield</td> +</tr> +<tr> +<td>#H5T_STD_B8LE</td> +<td>8-bit little-endian bitfield</td> +</tr> +<tr> +<td>#H5T_STD_B16BE</td> +<td>16-bit big-endian bitfield</td> +</tr> +<tr> +<td>#H5T_STD_B16LE</td> +<td>16-bit little-endian bitfield</td> +</tr> +<tr> +<td>#H5T_STD_B32BE</td> +<td>32-bit big-endian bitfield</td> +</tr> +<tr> +<td>#H5T_STD_B32LE</td> +<td>32-bit little-endian bitfield</td> +</tr> +<tr> +<td>#H5T_STD_B64BE</td> +<td>64-bit big-endian bitfield</td> +</tr> +<tr> +<td>#H5T_STD_B64LE</td> +<td>64-bit little-endian bitfield</td> +</tr> +<tr> +<td>#H5T_STD_REF_OBJ</td> +<td>Object reference</td> +</tr> +<tr> +<td>#H5T_STD_REF_DSETREG</td> +<td>Dataset region reference</td> +</tr> +</table> +//! [predefined_std_datatypes_table] + * + * +//! [predefined_unix_datatypes_table] +<table> +<caption>Predefined UNIX-specific Datatypes</caption> +<tr> +<th>Datatype</th> +<th>Description</th> +</tr> +<tr> +<td>#H5T_UNIX_D32BE</td> +<td>32-bit big-endian</td> +</tr> +<tr> +<td>#H5T_UNIX_D32LE</td> +<td>32-bit little-endian</td> +</tr> +<tr> +<td>#H5T_UNIX_D64BE</td> +<td>64-bit big-endian</td> +</tr> +<tr> +<td>#H5T_UNIX_D64LE</td> +<td>64-bit little-endian</td> +</tr> +</table> +//! [predefined_unix_datatypes_table] + * + * +//! [predefined_string_datatypes_table] +<table> +<caption>Predefined String Datatypes</caption> +<tr> +<th>Datatype</th> +<th>Description</th> +</tr> +<tr> +<td>#H5T_C_S1</td> +<td>String datatype in C (size defined in bytes rather than in bits)</td> +</tr> +</tr> +<tr> +<td>#H5T_FORTRAN_S1</td> +<td>String datatype in Fortran (as defined for the HDF5 C library)</td> +</tr> +</table> +//! [predefined_string_datatypes_table] + * + * +//! [predefined_intel_datatypes_table] +<table> +<caption>Predefined Intel-specific Datatypes</caption> +<tr> +<th>Datatype</th> +<th>Description</th> +</tr> +<tr> +<td>#H5T_INTEL_I8</td> +<td>8-bit little-endian signed integer (2's complement)</td> +</tr> +<tr> +<td>#H5T_INTEL_I16</td> +<td>16-bit little-endian signed integer (2's complement)</td> +</tr> +<tr> +<td>#H5T_INTEL_I32</td> +<td>32-bit little-endian signed integer (2's complement)</td> +</tr> +<tr> +<td>#H5T_INTEL_I64</td> +<td>64-bit little-endian signed integer (2's complement)</td> +</tr> +<tr> +<td>#H5T_INTEL_U8</td> +<td>8-bit little-endian unsigned integer</td> +</tr> +<tr> +<td>#H5T_INTEL_U16</td> +<td>16-bit little-endian unsigned integer</td> +</tr> +<tr> +<td>#H5T_INTEL_U32</td> +<td>32-bit little-endian unsigned integer</td> +</tr> +<tr> +<td>#H5T_INTEL_U64</td> +<td>64-bit little-endian unsigned integer</td> +</tr> +<tr> +<td>#H5T_INTEL_B8</td> +<td>8-bit little-endian bitfield</td> +</tr> +<tr> +<td>#H5T_INTEL_B16</td> +<td>16-bit little-endian bitfield</td> +</tr> +<tr> +<td>#H5T_INTEL_B32</td> +<td>32-bit little-endian bitfield</td> +</tr> +<tr> +<td>#H5T_INTEL_B64</td> +<td>64-bit little-endian bitfield</td> +</tr> +<tr> +<td>#H5T_INTEL_F32</td> +<td>32-bit little-endian IEEE floating point</td> +</tr> +<tr> +<td>#H5T_INTEL_F64</td> +<td>64-bit little-endian IEEE floating point</td> +</tr> +</table> +//! [predefined_intel_datatypes_table] + * + * +//! [predefined_dec_datatypes_table] +<table> +<caption>Predefined DEC Alpha-specific Datatypes</caption> +<tr> +<th>Datatype</th> +<th>Description</th> +</tr> +<tr> +<td>#H5T_ALPHA_I8</td> +<td>8-bit little-endian signed integer (2's complement)</td> +</tr> +<tr> +<td>#H5T_ALPHA_I16</td> +<td>16-bit little-endian signed integer (2's complement)</td> +</tr> +<tr> +<td>#H5T_ALPHA_I32</td> +<td>32-bit little-endian signed integer (2's complement)</td> +</tr> +<tr> +<td>#H5T_ALPHA_I64</td> +<td>64-bit little-endian signed integer (2's complement)</td> +</tr> +<tr> +<td>#H5T_ALPHA_U8</td> +<td>8-bit little-endian unsigned integer</td> +</tr> +<tr> +<td>#H5T_ALPHA_U16</td> +<td>16-bit little-endian unsigned integer</td> +</tr> +<tr> +<td>#H5T_ALPHA_U32</td> +<td>32-bit little-endian unsigned integer</td> +</tr> +<tr> +<td>#H5T_ALPHA_U64</td> +<td>64-bit little-endian unsigned integer</td> +</tr> +<tr> +<td>#H5T_ALPHA_B8</td> +<td>8-bit little-endian bitfield</td> +</tr> +<tr> +<td>#H5T_ALPHA_B16</td> +<td>16-bit little-endian bitfield</td> +</tr> +<tr> +<td>#H5T_ALPHA_B32</td> +<td>32-bit little-endian bitfield</td> +</tr> +<tr> +<td>#H5T_ALPHA_B64</td> +<td>64-bit little-endian bitfield</td> +</tr> +<tr> +<td>#H5T_ALPHA_F32</td> +<td>32-bit little-endian IEEE floating point</td> +</tr> +<tr> +<td>#H5T_ALPHA_F64</td> +<td>64-bit little-endian IEEE floating point</td> +</tr> +</table> +//! [predefined_dec_datatypes_table] + * + * +//! [predefined_openvms_datatypes_table] +<table> +<caption>Predefined OpenVMS DEC Alpha-specific Datatypes</caption> +<tr> +<th>Datatype</th> +<th>Description</th> +</tr> +<tr> +<td>#H5T_VAX_F32</td> +<td>32-bit floating point (Corresponds to F_Floating type)</td> +</tr> +<tr> +<td>#H5T_VAX_F64</td> +<td>64-bit floating point (Corresponds to G_Floating type)</td> +</tr> +</table> +//! [predefined_openvms_datatypes_table] + * + * +//! [predefined_mips_datatypes_table] +<table> +<caption>Predefined MIPS-specific Datatypes</caption> +<tr> +<th>Datatype</th> +<th>Description</th> +</tr> +<tr> +<td>#H5T_MIPS_I8</td> +<td>8-bit big-endian signed integer (2's complement)</td> +</tr> +<tr> +<td>#H5T_MIPS_I16</td> +<td>16-bit big-endian signed integer (2's complement)</td> +</tr> +<tr> +<td>#H5T_MIPS_I32</td> +<td>32-bit big-endian signed integer (2's complement)</td> +</tr> +<tr> +<td>#H5T_MIPS_I64</td> +<td>64-bit big-endian signed integer (2's complement)</td> +</tr> +<tr> +<td>#H5T_MIPS_U8</td> +<td>8-bit big-endian unsigned integer</td> +</tr> +<tr> +<td>#H5T_MIPS_U16</td> +<td>16-bit big-endian unsigned integer</td> +</tr> +<tr> +<td>#H5T_MIPS_U32</td> +<td>32-bit big-endian unsigned integer</td> +</tr> +<tr> +<td>#H5T_MIPS_U64</td> +<td>64-bit big-endian unsigned integer</td> +</tr> +<tr> +<td>#H5T_MIPS_B8</td> +<td>8-bit big-endian bitfield</td> +</tr> +<tr> +<td>#H5T_MIPS_B16</td> +<td>16-bit big-endian bitfield</td> +</tr> +<tr> +<td>#H5T_MIPS_B32</td> +<td>32-bit big-endian bitfield</td> +</tr> +<tr> +<td>#H5T_MIPS_B64</td> +<td>64-bit big-endian bitfield</td> +</tr> +<tr> +<td>#H5T_MIPS_F32</td> +<td>32-bit big-endian IEEE floating point</td> +</tr> +<tr> +<td>#H5T_MIPS_F64</td> +<td>64-bit big-endian IEEE floating point</td> +</tr> +</table> +//! [predefined_mips_datatypes_table] + * + * +//! [predefined_native_datatypes_table] +<table> +<caption>Predefined Native Datatypes</caption> +<tr> +<th>Datatype</th> +<th>Description</th> +</tr> +<tr> +<td>#H5T_NATIVE_CHAR</td> +<td>C-style char</td> +</tr> +<tr> +<td>#H5T_NATIVE_SCHAR</td> +<td>C-style signed char</td> +</tr> +<tr> +<td>#H5T_NATIVE_UCHAR</td> +<td>C-style unsigned signed char</td> +</tr> +<tr> +<td>#H5T_NATIVE_SHORT</td> +<td>C-style short</td> +</tr> +<tr> +<td>#H5T_NATIVE_USHORT</td> +<td>C-style unsigned short</td> +</tr> +<tr> +<td>#H5T_NATIVE_INT</td> +<td>C-style int</td> +</tr> +<tr> +<td>#H5T_NATIVE_UINT</td> +<td>C-style unsigned int</td> +</tr> +<tr> +<td>#H5T_NATIVE_LONG</td> +<td>C-style long</td> +</tr> +<tr> +<td>#H5T_NATIVE_ULONG</td> +<td>C-style unsigned long</td> +</tr> +<tr> +<td>#H5T_NATIVE_LLONG</td> +<td>C-style long long</td> +</tr> +<tr> +<td>#H5T_NATIVE_ULLONG</td> +<td>C-style unsigned long long</td> +</tr> +<tr> +<td>#H5T_NATIVE_FLOAT</td> +<td>C-style float</td> +</tr> +<tr> +<td>#H5T_NATIVE_DOUBLE</td> +<td>C-style double</td> +</tr> +<tr> +<td>#H5T_NATIVE_LDOUBLE</td> +<td>C-style long double</td> +</tr> +<tr> +<td>#H5T_NATIVE_B8</td> +<td>8-bit bitfield based on native types</td> +</tr> +<tr> +<td>#H5T_NATIVE_B16</td> +<td>16-bit bitfield based on native types</td> +</tr> +<tr> +<td>#H5T_NATIVE_B32</td> +<td>32-bit bitfield based on native types</td> +</tr> +<tr> +<td>#H5T_NATIVE_B64</td> +<td>64-bit bitfield based on native types</td> +</tr> +<tr> +<td>#H5T_NATIVE_OPAQUE</td> +<td>opaque unit based on native types</td> +</tr> +<tr> +<td>#H5T_NATIVE_HADDR</td> +<td>address type based on native types</td> +</tr> +<tr> +<td>#H5T_NATIVE_HSIZE</td> +<td>size type based on native types</td> +</tr> +<tr> +<td>#H5T_NATIVE_HSSIZE</td> +<td>signed size type based on native types</td> +</tr> +<tr> +<td>#H5T_NATIVE_HERR</td> +<td>error code type based on native types</td> +</tr> +<tr> +<td>#H5T_NATIVE_HBOOL</td> +<td>Boolean type based on native types</td> +</tr> +</table> +//! [predefined_native_datatypes_table] + * + * +//! [predefined_c9x_datatypes_table] +<table> +<caption>Predefined ANSI C9x-specific Native Integer Datatypes</caption> +<tr> +<th>Datatype</th> +<th>Description</th> +</tr> +<tr> +<td>#H5T_NATIVE_INT8</td> +<td>8-bit signed integer (2's complement)</td> +</tr> +<tr> +<td>#H5T_NATIVE_UINT8</td> +<td>8-bit unsigned integer</td> +</tr> +<tr> +<td>#H5T_NATIVE_INT_LEAST8</td> +<td>8-bit signed integer (2's complement) with storage to use least amount of space</td> +</tr> +<tr> +<td>#H5T_NATIVE_UINT_LEAST8</td> +<td>8-bit unsigned integer with storage to use least amount of space</td> +</tr> +<tr> +<td>#H5T_NATIVE_INT_FAST8</td> +<td>8-bit signed integer (2's complement) with storage to maximize performance</td> +</tr> +<tr> +<td>#H5T_NATIVE_UINT_FAST8</td> +<td>8-bit unsigned integer with storage to maximize performance</td> +</tr> +<tr> +<td>#H5T_NATIVE_INT16</td> +<td>16-bit signed integer (2's complement)</td> +</tr> +<tr> +<td>#H5T_NATIVE_UINT16</td> +<td>16-bit unsigned integer</td> +</tr> +<tr> +<td>#H5T_NATIVE_INT_LEAST16</td> +<td>16-bit signed integer (2's complement) with storage to use least amount of space</td> +</tr> +<tr> +<td>#H5T_NATIVE_UINT_LEAST16</td> +<td>16-bit unsigned integer with storage to use least amount of space</td> +</tr> +<tr> +<td>#H5T_NATIVE_INT_FAST16</td> +<td>16-bit signed integer (2's complement) with storage to maximize performance</td> +</tr> +<tr> +<td>#H5T_NATIVE_UINT_FAST16</td> +<td>16-bit unsigned integer with storage to maximize performance</td> +</tr> +<tr> +<td>#H5T_NATIVE_INT32</td> +<td>32-bit signed integer (2's complement)</td> +</tr> +<tr> +<td>#H5T_NATIVE_UINT32</td> +<td>32-bit unsigned integer</td> +</tr> +<tr> +<td>#H5T_NATIVE_INT_LEAST32</td> +<td>32-bit signed integer (2's complement) with storage to use least amount of space</td> +</tr> +<tr> +<td>#H5T_NATIVE_UINT_LEAST32</td> +<td>32-bit unsigned integer with storage to use least amount of space</td> +</tr> +<tr> +<td>#H5T_NATIVE_INT_FAST32</td> +<td>32-bit signed integer (2's complement) with storage to maximize performance</td> +</tr> +<tr> +<td>#H5T_NATIVE_UINT_FAST32</td> +<td>32-bit unsigned integer with storage to maximize performance</td> +</tr> +<tr> +<td>#H5T_NATIVE_INT64</td> +<td>64-bit signed integer (2's complement)</td> +</tr> +<tr> +<td>#H5T_NATIVE_UINT64</td> +<td>64-bit unsigned integer</td> +</tr> +<tr> +<td>#H5T_NATIVE_INT_LEAST64</td> +<td>64-bit signed integer (2's complement) with storage to use least amount of space</td> +</tr> +<tr> +<td>#H5T_NATIVE_UINT_LEAST64</td> +<td>64-bit unsigned integer with storage to use least amount of space</td> +</tr> +<tr> +<td>#H5T_NATIVE_INT_FAST64</td> +<td>64-bit signed integer (2's complement) with storage to maximize performance</td> +</tr> +<tr> +<td>#H5T_NATIVE_UINT_FAST64</td> +<td>64-bit unsigned integer with storage to maximize performance</td> +</tr> +</table> +//! [predefined_c9x_datatypes_table] + * + */ diff --git a/doxygen/examples/tables/propertyLists.dox b/doxygen/examples/tables/propertyLists.dox new file mode 100644 index 0000000..86dd952 --- /dev/null +++ b/doxygen/examples/tables/propertyLists.dox @@ -0,0 +1,895 @@ +/** Property List Tables + * +//! [plcr_table] +<table> +<caption id="table_plcr_id" border="1" style="background-color:whitesmoke;">Property list class root functions (H5P)</caption> +<tr> +<th>Function</th> +<th>Purpose</th> +</tr> +<tr> +<td>#H5Pclose</td> +<td>Terminates access to a property list.</td> +</tr> +<tr> +<td>#H5Pcopy</td> +<td>Copies an existing property list to create a new property list.</td> +</tr> +<tr> +<td>#H5Pcreate</td> +<td>Creates a new property list as an instance of a property list class.</td> +</tr> +<tr> +<td>#H5Pencode/#H5Pdecode</td> +<td>Encodes/ecodes property list into/from a binary object buffer.</td> +</tr> +<tr> +<td>#H5Pget_class</td> +<td>Returns the property list class identifier for a property list</td> +</tr> +</table> +//! [plcr_table] + * +//! [plcra_table] +<table> +<caption id="table_plcra_id" border="1" style="background-color:whitesmoke;">Property list class root (Advanced) functions (H5P)</caption> +<tr> +<th>Function</th> +<th>Purpose</th> +</tr> +<tr> +<td>#H5Pclose_class</td> +<td>Closes an existing property list class.</td> +</tr> +<tr> +<td>#H5Pcopy_prop</td> +<td>Copies a property from one list or class to another.</td> +</tr> +<tr> +<td>#H5Pcreate_class</td> +<td>Creates a new property list class.</td> +</tr> +<tr> +<td>#H5Pequal</td> +<td>Compares two property lists or classes for equality.</td> +</tr> +<tr> +<td>#H5Pexist</td> +<td>Queries whether a property name exists in a property list or class.</td> +</tr> +<tr> +<td>#H5Pget_class_name</td> +<td>Retrieves the name of a class.</td> +</tr> +<tr> +<td>#H5Pget_class_parent</td> +<td>Retrieves the parent class of a property class.</td> +</tr> +<tr> +<td>#H5Pget_nprops</td> +<td>Queries the number of properties in a property list or class.</td> +</tr> +<tr> +<td>#H5Pget_size</td> +<td>Queries the size of a property value in bytes.</td> +</tr> +<tr> +<td>#H5Pinsert</td> +<td>Registers a temporary property with a property list.</td> +</tr> +<tr> +<td>#H5Pisa_class</td> +<td>Determines whether a property list is a member of a class.</td> +</tr> +<tr> +<td>#H5Piterate</td> +<td>Iterates over properties in a property class or list</td> +</tr> +<tr> +<td>#H5Pregister/#H5Punregister</td> +<td>Registers/removes a permanent property with/from a property list class</td> +</tr> +<tr> +<td>#H5Premove</td> +<td>Removes a property from a property list.</td> +</tr> +<tr> +<td>#H5Pset/#H5Pget</td> +<td>Sets/queries a property list value</td> +</tr> +</table> +//! [plcra_table] + * +//! [fcpl_table] +<table> +<caption id="table_fcpl_id" border="1" style="background-color:whitesmoke;">File creation property list functions (H5P)</caption> +<tr> +<th>Function</th> +<th>Purpose</th> +</tr> +<tr> +<td>#H5Pset_userblock/#H5Pget_userblock</td> +<td>Sets/retrieves size of userblock.</td> +</tr> +<tr> +<td>#H5Pset_sizes/#H5Pget_sizes</td> +<td>Sets/retrieves byte size of offsets and lengths used to address objects in HDF5 file.</td> +</tr> +<tr> +<td>#H5Pset_sym_k/#H5Pget_sym_k</td> +<td>Sets/retrieves size of parameters used to control symbol table nodes.</td> +</tr> +<tr> +<td>#H5Pset_istore_k/#H5Pget_istore_k</td> +<td>Sets/retrieves size of parameter used to control B-trees for indexing chunked datasets.</td> +</tr> +<tr> +<td>#H5Pset_file_space_page_size/#H5Pget_file_space_page_size</td> +<td>Sets or retrieves the file space page size used in paged aggregation and paged buffering.</td> +</tr> +<tr> +<td>#H5Pset_file_space_strategy/#H5Pget_file_space_strategy</td> +<td>Sets or retrieves the file space handling strategy, the persisting free-space and the free-space section size.</td> +</tr> +<tr> +<td>#H5Pset_shared_mesg_nindexes/#H5Pget_shared_mesg_nindexes</td> +<td>Sets or retrieves number of shared object header message indexes in file +creation property list.</td> +</tr> +<tr> +<td>#H5Pset_shared_mesg_index</td> +<td>Configures the specified shared object header message index.</td> +</tr> +<tr> +<td>#H5Pget_shared_mesg_index</td> +<td>Retrieves the configuration settings for a shared message index.</td> +</tr> +<tr> +<td>#H5Pset_shared_mesg_phase_change/#H5Pget_shared_mesg_phase_change</td> +<td>Sets or retrieves shared object header message storage phase change thresholds.</td> +</tr> +<tr> +<td>#H5Pget_version</td> +<td></td> +</tr> +</table> +//! [fcpl_table] + * +//! [fapl_table] +<table> +<caption id="table_fapl_id" border="1" style="background-color:whitesmoke;">File access property list functions (H5P)</caption> +<tr> +<th>Function</th> +<th>Purpose</th> +</tr> +<tr> +<td>#H5Pset_alignment/#H5Pget_alignment</td> +<td>Sets/retrieves alignment properties.</td> +</tr> +<tr> +<td>#H5Pset_cache/#H5Pget_cache</td> +<td>Sets/retrieves metadata cache and raw data chunk cache parameters.</td> +</tr> +<tr> +<td>#H5Pset_core_write_tracking/#H5Pget_core_write_tracking</td> +<td>Sets/retrieves write tracking information for core driver.</td> +</tr> +<tr> +<td>#H5Pset_elink_file_cache_size/#H5Pget_elink_file_cache_size</td> +<td>Sets/retrieves the size of the external link open file cache from the specified +file access property list.</td> +</tr> +<tr> +<td>#H5Pset_evict_on_close/#H5Pget_evict_on_close</td> +<td>Set/get the file access property list setting that determines whether an HDF5 object will be evicted from the library's metadata cache when it is closed.</td> +</tr> +<tr> +<td>#H5Pset_gc_references/#H5Pget_gc_references</td> +<td>Sets/retrieves garbage collecting references flag.</td> +</tr> +<tr> +<td>#H5Pset_family_offset</td> +<td>Sets offset property for low-level access to a file in a family of files.</td> +</tr> +<tr> +<td>#H5Pget_family_offset</td> +<td>Retrieves a data offset from the file access property list.</td> +</tr> +<tr> +<td>#H5Pset_fclose_degree/#H5Pget_fclose_degree</td> +<td>Sets/retrieves file close degree property.</td> +</tr> +<tr> +<td>#H5Pset_file_image</td> +<td>Sets an initial file image in a memory buffer.</td> +</tr> +<tr> +<td>#H5Pget_file_image</td> +<td>Retrieves a copy of the file image designated as the initial content and structure of a file.</td> +</tr> +<tr> +<td>#H5Pset_file_image_callbacks/#H5Pget_file_image_callbacks</td> +<td>Sets/gets the callbacks for working with file images.</td> +</tr> +<tr> +<td>#H5Pset_file_locking/#H5Pget_file_locking</td> +<td>Sets/retrieves file locking property values.</td> +</tr> +<tr> +<td>#H5Pset_meta_block_size/#H5Pget_meta_block_size</td> +<td>Sets the minimum metadata blocksize or retrieves the current metadata block size setting.</td> +</tr> +<tr> +<td>#H5Pset_metadata_read_attempts/#H5Pget_metadata_read_attempts</td> +<td>Sets/gets the number of read attempts from a file access property list.</td> +</tr> +<tr> +<td>#H5Pset_mdc_config/#H5Pget_mdc_config</td> +<td>Set/get the initial metadata cache configuration in the indicated file access property list.</td> +</tr> +<tr> +<td>#H5Pset_mdc_image_config/#H5Pget_mdc_image_config</td> +<td>Set/get the metadata cache image option for a file access property list.</td> +</tr> +<tr> +<td>#H5Pset_mdc_log_options/#H5Pget_mdc_log_options</td> +<td>Set/get the metadata cache logging options.</td> +</tr> +<tr> +<td>#H5Pset_multi_type/#H5Pget_multi_type</td> +<td>Sets/gets the type of data property for the MULTI driver.</td> +</tr> +<tr> +<td>#H5Pset_object_flush_cb/#H5Pget_object_flush_cb</td> +<td>Set/get the object flush property values from the file access property list.</td> +</tr> +<tr> +<td>#H5Pset_page_buffer_size/#H5Pget_page_buffer_size</td> +<td>Set/get the the maximum size for the page buffer.</td> +</tr> +<tr> +<td>#H5Pset_sieve_buf_size/#H5Pget_sieve_buf_size</td> +<td>Sets/retrieves maximum size of data sieve buffer.</td> +</tr> +<tr> +<td>#H5Pset_libver_bounds</td> +<td>Sets bounds on library versions, and indirectly format versions, to be used +when creating objects.</td> +</tr> +<tr> +<td>#H5Pget_libver_bounds</td> +<td>Retrieves library version bounds settings that indirectly control the format +versions used when creating objects.</td> +</tr> +<tr> +<td>#H5Pset_small_data_block_size</td> +<td>Sets the size of a contiguous block reserved for small data.</td> +</tr> +<tr> +<td>#H5Pget_small_data_block_size</td> +<td>Retrieves the current small data block size setting.</td> +</tr> +<tr> +<td>#H5Pset_coll_metadata_write/#H5Pget_coll_metadata_write</td> +<td>Sets/retrieves metadata write mode setting.</td> +</tr> +</table> +//! [fapl_table] + * +//! [fd_pl_table] +<table> +<caption id="table_fd_pl_id" border="1" style="background-color:whitesmoke;">File driver property list functions (H5P)</caption> +<tr> +<th>Function</th> +<th>Purpose</th> +</tr> +<tr> +<td>#H5Pset_driver</td> +<td>Sets a file driver.</td> +</tr> +<tr> +<td>#H5Pget_driver</td> +<td>Returns the identifier for the driver used to create a file.</td> +</tr> +<tr> +<td>#H5Pget_driver_info</td> +<td>Returns a pointer to file driver information.</td> +</tr> +<tr> +<td>#H5Pset_fapl_core/#H5Pget_fapl_core</td> +<td>Sets the driver for buffered memory files (in RAM) or retrieves information regarding +the driver.</td> +</tr> +<tr> +<td>#H5Pset_fapl_direct/#H5Pget_fapl_direct</td> +<td>Sets up use of the direct I/O driver or retrieves the direct I/O driver settings.</td> +</tr> +<tr> +<td>#H5Pset_fapl_family/#H5Pget_fapl_family</td> +<td>Sets driver for file families, designed for systems that do not support files +larger than 2 gigabytes, or retrieves information regarding driver.</td> +</tr> +<tr> +<td>#H5Pset_fapl_hdfs/#H5Pget_fapl_hdfs</td> +<td>.</td> +</tr> +<tr> +<td>#H5Pset_fapl_log</td> +<td>Sets logging driver.</td> +</tr> +<tr> +<td>#H5Pset_fapl_mpio/#H5Pget_fapl_mpio</td> +<td>Sets driver for files on parallel file systems (MPI I/O) or retrieves information +regarding the driver.</td> +</tr> +<tr> +<td>#H5Pset_fapl_multi/#H5Pget_fapl_multi</td> +<td>Sets driver for multiple files, separating categories of metadata and raw data, +or retrieves information regarding driver.</td> +</tr> +<tr> +<td>#H5Pset_fapl_sec2</td> +<td>Sets driver for unbuffered permanent files or retrieves information regarding driver.</td> +</tr> +<tr> +<td>#H5Pset_fapl_split</td> +<td>Sets driver for split files, a limited case of multiple files with one metadata file +and one raw data file.</td> +</tr> +<tr> +<td>#H5Pset_fapl_stdio</td> +<td>Sets driver for buffered permanent files.</td> +</tr> +<tr> +<td>#H5Pset_fapl_windows</td> +<td>Sets the Windows I/O driver.</td> +</tr> +<tr> +<td>#H5Pset_multi_type</td> +<td>Specifies type of data to be accessed via the MULTI driver enabling more direct access.</td> +</tr> +<tr> +<td>#H5Pget_multi_type</td> +<td>Retrieves type of data property for MULTI driver.</td> +</tr> +</table> +//! [fd_pl_table] + * +//! [dcpl_table] +<table> +<caption id="table_dcpl_id" border="1" style="background-color:whitesmoke;">Dataset creation property list functions (H5P)</caption> +<tr> +<th>Function</th> +<th>Purpose</th> +</tr> +<tr> +<td>#H5Pset_layout</td> +<td>Sets the type of storage used to store the raw data for a dataset.</td> +</tr> +<tr> +<td>#H5Pget_layout</td> +<td>Returns the layout of the raw data for a dataset.</td> +</tr> +<tr> +<td>#H5Pset_chunk</td> +<td>Sets the size of the chunks used to store a chunked layout dataset.</td> +</tr> +<tr> +<td>#H5Pget_chunk</td> +<td>Retrieves the size of chunks for the raw data of a chunked layout dataset.</td> +</tr> +<tr> +<td>#H5Pset_chunk_opts/#H5Pget_chunk_opts</td> +<td>Sets/gets the edge chunk option setting from a dataset creation property list.</td> +</tr> +<tr> +<td>#H5Pset_deflate</td> +<td>Sets compression method and compression level.</td> +</tr> +<tr> +<td>#H5Pset_fill_value</td> +<td>Sets the fill value for a dataset.</td> +</tr> +<tr> +<td>#H5Pget_fill_value</td> +<td>Retrieves a dataset fill value.</td> +</tr> +<tr> +<td>#H5Pfill_value_defined</td> +<td>Determines whether the fill value is defined.</td> +</tr> +<tr> +<td>#H5Pset_fill_time</td> +<td>Sets the time when fill values are written to a dataset.</td> +</tr> +<tr> +<td>#H5Pget_fill_time</td> +<td>Retrieves the time when fill value are written to a dataset.</td> +</tr> +<tr> +<td>#H5Pset_alloc_time</td> +<td>Sets the timing for storage space allocation.</td> +</tr> +<tr> +<td>#H5Pget_alloc_time</td> +<td>Retrieves the timing for storage space allocation.</td> +</tr> +<tr> +<td>#H5Pset_filter</td> +<td>Adds a filter to the filter pipeline.</td> +</tr> +<tr> +<td>#H5Pall_filters_avail</td> +<td>Verifies that all required filters are available.</td> +</tr> +<tr> +<td>#H5Pget_nfilters</td> +<td>Returns the number of filters in the pipeline.</td> +</tr> +<tr> +<td>#H5Pget_filter</td> +<td>Returns information about a filter in a pipeline. +The C function is a macro: \see \ref api-compat-macros.</td> +</tr> +<tr> +<td>#H5Pget_filter_by_id</td> +<td>Returns information about the specified filter. +The C function is a macro: \see \ref api-compat-macros.</td> +</tr> +<tr> +<td>#H5Pmodify_filter</td> +<td>Modifies a filter in the filter pipeline.</td> +</tr> +<tr> +<td>#H5Premove_filter</td> +<td>Deletes one or more filters in the filter pipeline.</td> +</tr> +<tr> +<td>#H5Pset_fletcher32</td> +<td>Sets up use of the Fletcher32 checksum filter.</td> +</tr> +<tr> +<td>#H5Pset_nbit</td> +<td>Sets up use of the n-bit filter.</td> +</tr> +<tr> +<td>#H5Pset_scaleoffset</td> +<td>Sets up use of the scale-offset filter.</td> +</tr> +<tr> +<td>#H5Pset_shuffle</td> +<td>Sets up use of the shuffle filter.</td> +</tr> +<tr> +<td>#H5Pset_szip</td> +<td>Sets up use of the Szip compression filter.</td> +</tr> +<tr> +<td>#H5Pset_external</td> +<td>Adds an external file to the list of external files.</td> +</tr> +<tr> +<td>#H5Pget_external_count</td> +<td>Returns the number of external files for a dataset.</td> +</tr> +<tr> +<td>#H5Pget_external</td> +<td>Returns information about an external file.</td> +</tr> +<tr> +<td>#H5Pset_char_encoding</td> +<td>Sets the character encoding used to encode a string. Use to set ASCII or UTF-8 character +encoding for object names.</td> +</tr> +<tr> +<td>#H5Pget_char_encoding</td> +<td>Retrieves the character encoding used to create a string.</td> +</tr> +<tr> +<td>#H5Pset_virtual</td> +<td>Sets the mapping between virtual and source datasets.</td> +</tr> +<tr> +<td>#H5Pget_virtual_count</td> +<td>Gets the number of mappings for the virtual dataset.</td> +</tr> +<tr> +<td>#H5Pget_virtual_dsetname</td> +<td>Gets the name of a source dataset used in the mapping.</td> +</tr> +<tr> +<td>#H5Pget_virtual_filename</td> +<td>Gets the filename of a source dataset used in the mapping.</td> +</tr> +<tr> +<td>#H5Pget_virtual_srcspace</td> +<td>Gets a dataspace identifier for the selection within the source dataset used in the mapping.</td> +</tr> +<tr> +<td>#H5Pget_virtual_vspace</td> +<td>Gets a dataspace identifier for the selection within the virtual dataset used in the mapping.</td> +</tr> +<tr> +<td>#H5Pset_dset_no_attrs_hint/#H5Pget_dset_no_attrs_hint</td> +<td>Sets/gets the flag to create minimized dataset object headers.</td> +</tr> +</table> +//! [dcpl_table] + * +//! [dapl_table] +<table> +<caption id="table_dapl_id" border="1" style="background-color:whitesmoke;">Dataset access property list functions (H5P)</caption> +<tr> +<th>Function</th> +<th>Purpose</th> +</tr> +<tr> +<td>#H5Pset_buffer</td> +<td>Sets type conversion and background buffers.</td> +</tr> +<tr> +<td>#H5Pget_buffer</td> +<td>Reads buffer settings.</td> +</tr> +<tr> +<td>#H5Pset_append_flush/#H5Pget_append_flush</td> +<td>Sets/gets the values of the append property that is set up in the dataset access property list.</td> +</tr> +<tr> +<td>#H5Pset_chunk_cache/#H5Pget_chunk_cache</td> +<td>Sets/gets the raw data chunk cache parameters.</td> +</tr> +<tr> +<td>#H5Pset_efile_prefix/#H5Pget_efile_prefix</td> +<td>Sets/gets the prefix for external raw data storage files as set in the dataset access property list.</td> +</tr> +<tr> +<td>#H5Pset_virtual_prefix/#H5Pget_virtual_prefix</td> +<td>Sets/gets the prefix to be applied to VDS source file paths.</td> +</tr> +<tr> +<td>#H5Pset_virtual_printf_gap/#H5Pget_virtual_printf_gap</td> +<td>Sets/gets the maximum number of missing source files and/or datasets with the printf-style names when getting the extent for an unlimited virtual dataset.</td> +</tr> +<tr> +<td>#H5Pset_virtual_view/#H5Pget_virtual_view</td> +<td>Sets/gets the view of the virtual dataset (VDS) to include or exclude missing mapped elements.</td> +</tr> +</table> +//! [dapl_table] + * +//! [dxpl_table] +<table> +<caption id="table_dxpl_id" border="1" style="background-color:whitesmoke;">Data transfer property list functions (H5P)</caption> +<tr> +<th>C Function</th> +<th>Purpose</th> +</tr> +<tr> +<td>#H5Pset_btree_ratios/#H5Pget_btree_ratios</td> +<td>Sets/gets B-tree split ratios for a dataset transfer property list.</td> +</tr> +<tr> +<td>#H5Pset_buffer</td> +<td>Maximum size for the type conversion buffer and the background buffer. May also supply +pointers to application-allocated buffers.</td> +</tr> +<tr> +<td>#H5Pset_data_transform/#H5Pget_data_transform</td> +<td>Sets/gets a data transform expression.</td> +</tr> +<tr> +<td>#H5Pset_edc_check/#H5Pget_edc_check</td> +<td>Sets/gets whether to enable error-detection when reading a dataset.</td> +</tr> +<tr> +<td>#H5Pset_hyper_vector_size</td> +<td>set the number of "I/O vectors" (offset and length pairs) which are to be +accumulated in memory before being issued to the lower levels +of the library for reading or writing the actual data.</td> +</tr> +<tr> +<td>#H5Pset_filter_callback</td> +<td>Sets user-defined filter callback function.</td> +</tr> +<tr> +<td>#H5Pset_hyper_vector_size/#H5Pget_hyper_vector_size</td> +<td>Sets/gets number of I/O vectors to be read/written in hyperslab I/O.</td> +</tr> +<tr> +<td>#H5Pset_type_conv_cb/#H5Pget_type_conv_cb</td> +<td>Sets/gets user-defined datatype conversion callback function.</td> +</tr> +<tr> +<td>#H5Pset_vlen_mem_manager/#H5Pget_vlen_mem_manager</td> +<td>Sets/gets the memory manager for variable-length datatype allocation in #H5Dread and +#H5Dvlen_reclaim.</td> +</tr> +<tr> +<td>#H5Pset_dxpl_mpio/#H5Pget_dxpl_mpio</td> +<td>Sets/gets data transfer mode.</td> +</tr> +<tr> +<td>#H5Pset_dxpl_mpio_chunk_opt</td> +<td>Sets a flag specifying linked-chunk I/O or multi-chunk I/O.</td> +</tr> +<tr> +<td>#H5Pset_dxpl_mpio_chunk_opt_num</td> +<td>Sets a numeric threshold for linked-chunk I/O.</td> +</tr> +<tr> +<td>#H5Pset_dxpl_mpio_chunk_opt_ratio</td> +<td>Sets a ratio threshold for collective I/O.</td> +</tr> +<tr> +<td>#H5Pset_dxpl_mpio_collective_opt</td> +<td>Sets a flag governing the use of independent versus collective I/O.</td> +</tr> +<tr> +<td>#H5Pget_mpio_actual_chunk_opt_mode</td> +<td>Gets the type of chunk optimization that HDF5 actually performed on the last parallel I/O call.</td> +</tr> +<tr> +<td>#H5Pget_mpio_actual_io_mode</td> +<td>Gets the type of I/O that HDF5 actually performed on the last parallel I/O call.</td> +</tr> +<tr> +<td>#H5Pget_mpio_no_collective_cause</td> +<td>Gets local and global causes that broke collective I/O on the last parallel I/O call.</td> +</tr> +<tr> +<td>H5Pset_preserve/H5Pget_preserve</td> +<td>No longer available, deprecated as it no longer has any effect.</td> +</tr> +</table> +//! [dxpl_table] + * +//! [gcpl_table] +<table> +<caption id="table_gcpl_id">Group creation property list functions (H5P)</caption> +<tr> +<th>Function</th> +<th>Purpose</th> +</tr> +<tr> +<td>#H5Pall_filters_avail</td> +<td>Verifies that all required filters are available.</td> +</tr> +<tr> +<td>#H5Pget_filter</td> +<td>Returns information about a filter in a pipeline. The +C function is a macro: \see \ref api-compat-macros.</td> +</tr> +<tr> +<td>#H5Pget_filter_by_id</td> +<td>Returns information about the specified filter. The +C function is a macro: \see \ref api-compat-macros.</td> +</tr> +<tr> +<td>#H5Pget_nfilters</td> +<td>Returns the number of filters in the pipeline.</td> +</tr> +<tr> +<td>#H5Pmodify_filter</td> +<td>Modifies a filter in the filter pipeline.</td> +</tr> +<tr> +<td>#H5Premove_filter</td> +<td>Deletes one or more filters in the filter pipeline.</td> +</tr> +<tr> +<td>#H5Pset_deflate</td> +<td>Sets the deflate (GNU gzip) compression method and compression level.</td> +</tr> +<tr> +<td>#H5Pset_filter</td> +<td>Adds a filter to the filter pipeline.</td> +</tr> +<tr> +<td>#H5Pset_fletcher32</td> +<td>Sets up use of the Fletcher32 checksum filter.</td> +</tr> +<tr> +<td>#H5Pset_link_phase_change</td> +<td>Sets the parameters for conversion between compact and dense groups.</td> +</tr> +<tr> +<td>#H5Pget_link_phase_change</td> +<td>Queries the settings for conversion between compact and dense groups.</td> +</tr> +<tr> +<td>#H5Pset_est_link_info</td> +<td>Sets estimated number of links and length of link names in a group.</td> +</tr> +<tr> +<td>#H5Pget_est_link_info</td> +<td>Queries data required to estimate required local heap or object header size.</td> +</tr> +<tr> +<td>#H5Pset_nlinks</td> +<td>Sets maximum number of soft or user-defined link traversals.</td> +</tr> +<tr> +<td>#H5Pget_nlinks</td> +<td>Retrieves the maximum number of link traversals.</td> +</tr> +<tr> +<td>#H5Pset_link_creation_order</td> +<td>Sets creation order tracking and indexing for links in a group.</td> +</tr> +<tr> +<td>#H5Pget_link_creation_order</td> +<td>Queries whether link creation order is tracked and/or indexed in a group.</td> +</tr> +<tr> +<td>#H5Pset_char_encoding</td> +<td>Sets the character encoding used to encode a string. Use to set ASCII or UTF-8 character +encoding for object names.</td> +</tr> +<tr> +<td>#H5Pget_char_encoding</td> +<td>Retrieves the character encoding used to create a string.</td> +</tr> +</table> +//! [gcpl_table] + * +//! [gapl_table] +<table> +<caption id="table_gapl_id" border="1" style="background-color:whitesmoke;">Group access property list functions (H5P)</caption> +<tr> +<th>Function</th> +<th>Purpose</th> +</tr> +<tr> +<td>#H5Pset_all_coll_metadata_ops/#H5Pget_all_coll_metadata_ops</td> +<td>Sets/gets metadata I/O mode for read operations</td> +</tr> +</table> +//! [gapl_table] + * +//! [lapl_table] +<table> +<caption id="table_lapl_id" border="1" style="background-color:whitesmoke;">Link access property list functions (H5P)</caption> +<tr> +<th>Function</th> +<th>Purpose</th> +</tr> +<tr> +<td>#H5Pset_elink_cb/#H5Pget_elink_cb</td> +<td>Sets/gets the external link traversal callback function.</td> +</tr> +<tr> +<td>#H5Pset_elink_acc_flags/#H5Pget_elink_acc_flags</td> +<td>Sets/gets the external link traversal file access flag.</td> +</tr> +<tr> +<td>#H5Pset_elink_fapl/#H5Pget_elink_fapl</td> +<td>Sets/gets a file access property list for use in accessing a file pointed to by an external link</td> +</tr> +<tr> +<td>#H5Pset_elink_prefix/#H5Pget_elink_prefix</td> +<td>Sets/gets prefix to be applied to external link paths.</td> +</tr> +<tr> +<td>#H5Pset_nlinks/#H5Pget_nlinks</td> +<td>Sets/gets maximum number of soft or user-defined link traversals.</td> +</tr> +</table> +//! [lapl_table] + * +//! [ocpl_table] +<table> +<caption id="table_ocpl_id" border="1" style="background-color:whitesmoke;">Object creation property list functions (H5P)</caption> +<tr> +<th>Function</th> +<th>Purpose</th> +</tr> +<tr> +<td>#H5Pset_attr_creation_order/#H5Pget_attr_creation_order</td> +<td>Sets/gets tracking and indexing of attribute creation order.</td> +</tr> +<tr> +<td>#H5Pset_attr_phase_change/#H5Pget_attr_phase_change</td> +<td>Sets/gets attribute storage phase change thresholds</td> +</tr> +<tr> +<td>#H5Pset_filter/#H5Pget_filter</td> +<td>Adds/gets a filter to/from the filter pipeline.</td> +</tr> +<tr> +<td>#H5Pget_filter_by_id</td> +<td>Returns information about a filter in a pipeline.</td> +</tr> +<tr> +<td>#H5Pget_nfilters</td> +<td>Returns information about the specified filter.</td> +</tr> +<tr> +<td>#H5Pset_obj_track_times/#H5Pget_obj_track_times</td> +<td>Sets/gets the recording of times associated with an object.</td> +</tr> +<tr> +<td>#H5Pmodify_filter</td> +<td>Modifies a filter in the filter pipeline.</td> +</tr> +<tr> +<td>#H5Premove_filter</td> +<td>Delete one or more filters in the filter pipeline.</td> +</tr> +<tr> +<td>#H5Pset_fletcher32</td> +<td>Sets up use of the Fletcher32 checksum filter.</td> +</tr> +</table> +//! [ocpl_table] + * +//! [ocpypl_table] +<table> +<caption id="table_ocpypl_id" border="1" style="background-color:whitesmoke;">Object copy property list functions (H5P)</caption> +<tr> +<th>Function</th> +<th>Purpose</th> +</tr> +<tr> +<td>#H5Padd_merge_committed_dtype_path</td> +<td>Adds a path to the list of paths that will be searched in the destination file for a matching committed datatype.</td> +</tr> +<tr> +<td>#H5Pfree_merge_committed_dtype_paths</td> +<td>Clears the list of paths stored in the object copy property list.</td> +</tr> +<tr> +<td>#H5Pset_copy_object/#H5Pget_copy_object</td> +<td>Sets/gets the properties to be used when an object is copied.</td> +</tr> +<tr> +<td>#H5Pset_mcdt_search_cb/#H5Pget_mcdt_search_cb</td> +<td>Sets/gets the callback function that H5Ocopy() will invoke before searching for a matching committed datatype.</td> +</tr> +</table> +//! [ocpypl_table] + * +//! [strcpl_table] +<table> +<caption id="table_strcpl_id" border="1" style="background-color:whitesmoke;">String creation property list functions (H5P)</caption> +<tr> +<th>Function</th> +<th>Purpose</th> +</tr> +<tr> +<td>#H5Pset_char_encoding/#H5Pget_char_encoding</td> +<td>Sets/gets the character encoding used to encode link and attribute names.</td> +</tr> +</table> +//! [strcpl_table] + * +//! [lcpl_table] +<table> +<caption id="table_lcpl_id" border="1" style="background-color:whitesmoke;">Link creation property list functions (H5P)</caption> +<tr> +<th>Function</th> +<th>Purpose</th> +</tr> +<tr> +<td>#H5Pset_create_intermediate_group/#H5Pget_create_intermediate_group</td> +<td>Specifies/retrieves whether to create missing intermediate groups.</td> +</tr> +</table> +//! [lcpl_table] + * +//! [acpl_table] +<table> +<caption id="table_acpl_id" border="1" style="background-color:whitesmoke;">Attribute creation property list functions (H5P)</caption> +<tr> +<th>Function</th> +<th>Purpose</th> +</tr> +<tr> +<td>#H5Pset_char_encoding/#H5Pget_char_encoding</td> +<td>Sets/gets the character encoding used to encode link and attribute names.</td> +</tr> +</table> +//! [acpl_table] + * + */ +
\ No newline at end of file diff --git a/doxygen/hdf5_header.html b/doxygen/hdf5_header.html index 23f41f9..36a3265 100644 --- a/doxygen/hdf5_header.html +++ b/doxygen/hdf5_header.html @@ -21,7 +21,7 @@ $mathjax </head> <body> -<div style="background:#FFDDDD;font-size:120%;text-align:center;margin:0;padding:5px">Please, help us to better know about our user community by answering the following short survey: <a href="https://www.hdfgroup.org/website-survey/">https://www.hdfgroup.org/website-survey/</a></div> +<div style="background:#FFDDDD;font-size:120%;text-align:center;margin:0;padding:5px">Please, help us to better serve our user community by answering the following short survey: <a href="https://www.hdfgroup.org/website-survey/">https://www.hdfgroup.org/website-survey/</a></div> <div id="top"><!-- do not remove this div, it is closed by doxygen! --> diff --git a/doxygen/hdf5doxy_layout.xml b/doxygen/hdf5doxy_layout.xml index f7c47bf..d156f2c 100644 --- a/doxygen/hdf5doxy_layout.xml +++ b/doxygen/hdf5doxy_layout.xml @@ -4,14 +4,13 @@ <navindex> <tab type="user" url="index.html" title="Overview" /> <tab type="user" url="@ref GettingStarted" title="Getting started" /> - <tab type="user" url="@ref Cookbook" title="Cookbook" /> <tab type="user" url="@ref UG" title="User Guide" /> - <tab type="user" url="https://portal.hdfgroup.org/display/HDF5/HDF5+User+Guides" title="User Guides" /> - <tab type="user" url="https://portal.hdfgroup.org/display/HDF5/HDF5+Application+Developer%27s+Guide" title="Application Developer's Guide" /> - <tab type="user" url="@ref GLS" title="Glossary" /> <tab type="user" url="@ref RM" title="Reference Manual" /> - <tab type="user" url="@ref TN" title="Technical Notes" /> + <tab type="user" url="@ref GLS" title="Glossary" /> + <tab type="user" url="https://portal.hdfgroup.org/display/HDF5/HDF5+Application+Developer%27s+Guide" title="Application Developer's Guide" /> <tab type="user" url="@ref SPEC" title="Specifications" /> + <tab type="user" url="@ref Cookbook" title="Cookbook" /> + <tab type="user" url="@ref TN" title="Technical Notes" /> <tab type="user" url="@ref RFC" title="RFCs" /> <tab type="user" url="@ref FTS" title="Full-Text Search" /> <tab type="user" url="@ref About" title="About" /> diff --git a/src/H5ACpublic.h b/src/H5ACpublic.h index ad25de0..dab68b4 100644 --- a/src/H5ACpublic.h +++ b/src/H5ACpublic.h @@ -764,7 +764,7 @@ typedef struct H5AC_cache_image_config_t { * H5AC__CACHE_IMAGE__ENTRY_AGEOUT__MAX (100). * * \ref H5AC__CACHE_IMAGE__ENTRY_AGEOUT__NONE means that no limit is - * imposed on number of times a prefeteched entry can appear in subsequent + * imposed on number of times a prefetched entry can appear in subsequent * cache images. * * A value of 0 prevents prefetched entries from being included in cache diff --git a/src/H5Dmodule.h b/src/H5Dmodule.h index 4ad3709..8d2f23a 100644 --- a/src/H5Dmodule.h +++ b/src/H5Dmodule.h @@ -182,250 +182,11 @@ * </tr> * </table> * - * <table> - * <caption>Dataset creation property list functions (H5P)</caption> - * <tr> - * <th>Function</th> - * <th>Purpose</th> - * </tr> - * <tr> - * <td>#H5Pset_layout</td> - * <td>Sets the type of storage used to store the raw data for a dataset.</td> - * </tr> - * <tr> - * <td>#H5Pget_layout</td> - * <td>Returns the layout of the raw data for a dataset.</td> - * </tr> - * <tr> - * <td>#H5Pset_chunk</td> - * <td>Sets the size of the chunks used to store a chunked layout dataset.</td> - * </tr> - * <tr> - * <td>#H5Pget_chunk</td> - * <td>Retrieves the size of chunks for the raw data of a chunked layout dataset.</td> - * </tr> - * <tr> - * <td>#H5Pset_deflate</td> - * <td>Sets compression method and compression level.</td> - * </tr> - * <tr> - * <td>#H5Pset_fill_value</td> - * <td>Sets the fill value for a dataset.</td> - * </tr> - * <tr> - * <td>#H5Pget_fill_value</td> - * <td>Retrieves a dataset fill value.</td> - * </tr> - * <tr> - * <td>#H5Pfill_value_defined</td> - * <td>Determines whether the fill value is defined.</td> - * </tr> - * <tr> - * <td>#H5Pset_fill_time</td> - * <td>Sets the time when fill values are written to a dataset.</td> - * </tr> - * <tr> - * <td>#H5Pget_fill_time</td> - * <td>Retrieves the time when fill value are written to a dataset.</td> - * </tr> - * <tr> - * <td>#H5Pset_alloc_time</td> - * <td>Sets the timing for storage space allocation.</td> - * </tr> - * <tr> - * <td>#H5Pget_alloc_time</td> - * <td>Retrieves the timing for storage space allocation.</td> - * </tr> - * <tr> - * <td>#H5Pset_filter</td> - * <td>Adds a filter to the filter pipeline.</td> - * </tr> - * <tr> - * <td>#H5Pall_filters_avail</td> - * <td>Verifies that all required filters are available.</td> - * </tr> - * <tr> - * <td>#H5Pget_nfilters</td> - * <td>Returns the number of filters in the pipeline.</td> - * </tr> - * <tr> - * <td>#H5Pget_filter</td> - * <td>Returns information about a filter in a pipeline. - * The C function is a macro: \see \ref api-compat-macros.</td> - * </tr> - * <tr> - * <td>#H5Pget_filter_by_id</td> - * <td>Returns information about the specified filter. - * The C function is a macro: \see \ref api-compat-macros.</td> - * </tr> - * <tr> - * <td>#H5Pmodify_filter</td> - * <td>Modifies a filter in the filter pipeline.</td> - * </tr> - * <tr> - * <td>#H5Premove_filter</td> - * <td>Deletes one or more filters in the filter pipeline.</td> - * </tr> - * <tr> - * <td>#H5Pset_fletcher32</td> - * <td>Sets up use of the Fletcher32 checksum filter.</td> - * </tr> - * <tr> - * <td>#H5Pset_nbit</td> - * <td>Sets up use of the n-bit filter.</td> - * </tr> - * <tr> - * <td>#H5Pset_scaleoffset</td> - * <td>Sets up use of the scale-offset filter.</td> - * </tr> - * <tr> - * <td>#H5Pset_shuffle</td> - * <td>Sets up use of the shuffle filter.</td> - * </tr> - * <tr> - * <td>#H5Pset_szip</td> - * <td>Sets up use of the Szip compression filter.</td> - * </tr> - * <tr> - * <td>#H5Pset_external</td> - * <td>Adds an external file to the list of external files.</td> - * </tr> - * <tr> - * <td>#H5Pget_external_count</td> - * <td>Returns the number of external files for a dataset.</td> - * </tr> - * <tr> - * <td>#H5Pget_external</td> - * <td>Returns information about an external file.</td> - * </tr> - * <tr> - * <td>#H5Pset_char_encoding</td> - * <td>Sets the character encoding used to encode a string. Use to set ASCII or UTF-8 character - * encoding for object names.</td> - * </tr> - * <tr> - * <td>#H5Pget_char_encoding</td> - * <td>Retrieves the character encoding used to create a string.</td> - * </tr> - * </table> + * \anchor dcpl_table_tag Dataset creation property list functions (H5P) + * \snippet{doc} tables/propertyLists.dox dcpl_table * - * <table> - * <caption>Dataset access property list functions (H5P)</caption> - * <tr> - * <th>Function</th> - * <th>Purpose</th> - * </tr> - * <tr> - * <td>#H5Pset_buffer</td> - * <td>Sets type conversion and background buffers.</td> - * </tr> - * <tr> - * <td>#H5Pget_buffer</td> - * <td>Reads buffer settings.</td> - * </tr> - * <tr> - * <td>#H5Pset_chunk_cache</td> - * <td>Sets the raw data chunk cache parameters.</td> - * </tr> - * <tr> - * <td>#H5Pget_chunk_cache</td> - * <td>Retrieves the raw data chunk cache parameters.</td> - * </tr> - * <tr> - * <td>#H5Pset_edc_check</td> - * <td>Sets whether to enable error-detection when reading a dataset.</td> - * </tr> - * <tr> - * <td>#H5Pget_edc_check</td> - * <td>Determines whether error-detection is enabled for dataset reads.</td> - * </tr> - * <tr> - * <td>#H5Pset_filter_callback</td> - * <td>Sets user-defined filter callback function.</td> - * </tr> - * <tr> - * <td>#H5Pset_data_transform</td> - * <td>Sets a data transform expression.</td> - * </tr> - * <tr> - * <td>#H5Pget_data_transform</td> - * <td>Retrieves a data transform expression.</td> - * </tr> - * <tr> - * <td>#H5Pset_type_conv_cb</td> - * <td>Sets user-defined datatype conversion callback function.</td> - * </tr> - * <tr> - * <td>#H5Pget_type_conv_cb</td> - * <td>Gets user-defined datatype conversion callback function.</td> - * </tr> - * <tr> - * <td>#H5Pset_hyper_vector_size</td> - * <td>Sets number of I/O vectors to be read/written in hyperslab I/O.</td> - * </tr> - * <tr> - * <td>#H5Pget_hyper_vector_size</td> - * <td>Retrieves number of I/O vectors to be read/written in hyperslab I/O.</td> - * </tr> - * <tr> - * <td>#H5Pset_btree_ratios</td> - * <td>Sets B-tree split ratios for a dataset transfer property list.</td> - * </tr> - * <tr> - * <td>#H5Pget_btree_ratios</td> - * <td>Gets B-tree split ratios for a dataset transfer property list.</td> - * </tr> - * <tr> - * <td>#H5Pset_vlen_mem_manager</td> - * <td>Sets the memory manager for variable-length datatype allocation in #H5Dread and - * #H5Dvlen_reclaim.</td> - * </tr> - * <tr> - * <td>#H5Pget_vlen_mem_manager</td> - * <td>Gets the memory manager for variable-length datatype allocation in #H5Dread and - * #H5Dvlen_reclaim.</td> - * </tr> - * <tr> - * <td>#H5Pset_dxpl_mpio</td> - * <td>Sets data transfer mode.</td> - * </tr> - * <tr> - * <td>#H5Pget_dxpl_mpio</td> - * <td>Returns the data transfer mode.</td> - * </tr> - * <tr> - * <td>#H5Pset_dxpl_mpio_chunk_opt</td> - * <td>Sets a flag specifying linked-chunk I/O or multi-chunk I/O.</td> - * </tr> - * <tr> - * <td>#H5Pset_dxpl_mpio_chunk_opt_num</td> - * <td>Sets a numeric threshold for linked-chunk I/O.</td> - * </tr> - * <tr> - * <td>#H5Pset_dxpl_mpio_chunk_opt_ratio</td> - * <td>Sets a ratio threshold for collective I/O.</td> - * </tr> - * <tr> - * <td>#H5Pset_dxpl_mpio_collective_opt</td> - * <td>Sets a flag governing the use of independent versus collective I/O.</td> - * </tr> - * <tr> - * <td>#H5Pset_multi_type</td> - * <td>Sets the type of data property for the MULTI driver.</td> - * </tr> - * <tr> - * <td>#H5Pget_multi_type</td> - * <td>Retrieves the type of data property for the MULTI driver.</td> - * </tr> - * <tr> - * <td>#H5Pset_small_data_block_size</td> - * <td>Sets the size of a contiguous block reserved for small data.</td> - * </tr> - * <tr> - * <td>#H5Pget_small_data_block_size</td> - * <td>Retrieves the current small data block size setting.</td> - * </tr> - * </table> + * \anchor dapl_table_tag Dataset access property list functions (H5P) + * \snippet{doc} tables/propertyLists.dox dapl_table * * \subsection subsec_dataset_program Programming Model for Datasets * This section explains the programming model for datasets. @@ -1106,41 +867,7 @@ * the pipeline processing: the pipeline and filter operations are identical no matter what data access * mechanism is used. * - * <table> - * <caption>I/O file drivers</caption> - * <tr> - * <th>File Driver</th> - * <th>Description</th> - * </tr> - * <tr> - * <td>#H5FD_CORE</td> - * <td>Store in memory (optional backing store to disk file).</td> - * </tr> - * <tr> - * <td>#H5FD_FAMILY</td> - * <td>Store in a set of files.</td> - * </tr> - * <tr> - * <td>#H5FD_LOG</td> - * <td>Store in logging file.</td> - * </tr> - * <tr> - * <td>#H5FD_MPIO</td> - * <td>Store using MPI/IO.</td> - * </tr> - * <tr> - * <td>#H5FD_MULTI</td> - * <td>Store in multiple files. There are several options to control layout.</td> - * </tr> - * <tr> - * <td>#H5FD_SEC2</td> - * <td>Serial I/O to file using Unix “section 2” functions.</td> - * </tr> - * <tr> - * <td>#H5FD_STDIO</td> - * <td>Serial I/O to file using Unix “stdio” functions.</td> - * </tr> - * </table> + * \snippet{doc} tables/propertyLists.dox lcpl_table * * Each file driver writes/reads contiguous blocks of bytes from a logically contiguous address * space. The file driver is responsible for managing the details of the different physical storage @@ -1157,29 +884,7 @@ * Data transfer properties set optional parameters that control parts of the data pipeline. The * function listing below shows transfer properties that control the behavior of the library. * - * <table> - * <caption>Data transfer property list functions</caption> - * <tr> - * <th>C Function</th> - * <th>Purpose</th> - * </tr> - * <tr> - * <td>#H5Pset_buffer</td> - * <td>Maximum size for the type conversion buffer and the background buffer. May also supply - * pointers to application-allocated buffers.</td> - * </tr> - * <tr> - * <td>#H5Pset_hyper_vector_size</td> - * <td>set the number of "I/O vectors" (offset and length pairs) which are to be - * accumulated in memory before being issued to the lower levels - * of the library for reading or writing the actual data.</td> - * </tr> - * <tr> - * <td>#H5Pset_btree_ratios</td> - * <td>Set the B-tree split ratios for a dataset transfer property list. The split ratios determine - * what percent of children go in the first node when a node splits.</td> - * </tr> - * </table> + * \snippet{doc} tables/fileDriverLists.dox file_driver_table * * Some filters and file drivers require or use additional parameters from the application program. * These can be passed in the data transfer property list. The table below shows file driver property @@ -1897,10 +1602,10 @@ allocated if necessary. * <th>byte 0</th> * </tr> * <tr> - * <td>????????</td> - * <td>????SPPP</td> - * <td>PPPPPPPP</td> - * <td>PPPP????</td> + * <td> ???????? </td> + * <td> ????SPPP </td> + * <td> PPPPPPPP </td> + * <td> PPPP???? </td> * </tr> * <tr> * <td colspan="4"> diff --git a/src/H5Dpublic.h b/src/H5Dpublic.h index cfa5e9e..5e49431 100644 --- a/src/H5Dpublic.h +++ b/src/H5Dpublic.h @@ -464,6 +464,9 @@ H5_DLL hid_t H5Dget_type(hid_t dset_id); * a copy of the dataset creation property list associated with * the dataset specified by \p dset_id. * + * The creation property list identifier should be released with + * H5Pclose() to prevent resource leaks. + * */ H5_DLL hid_t H5Dget_create_plist(hid_t dset_id); @@ -641,7 +644,7 @@ H5_DLL herr_t H5Dget_chunk_info_by_coord(hid_t dset_id, const hsize_t *offset, u * \brief Iterate over all chunks of a chunked dataset * * \dset_id - * \param[in] dxpl_id Identifier of a transfer property list + * \param[in] dxpl_id Identifier of a transfer property list * \param[in] cb User callback function, called for every chunk. * \param[in] op_data User-defined pointer to data required by op * @@ -657,7 +660,7 @@ H5_DLL herr_t H5Dget_chunk_info_by_coord(hid_t dset_id, const hsize_t *offset, u * Iterate over all chunked datasets and chunks in a file. * \snippet H5D_examples.c H5Ovisit_cb * - * \since 1.10.9, 1.13.0 + * \since 1.10.9 * */ H5_DLL herr_t H5Dchunk_iter(hid_t dset_id, hid_t dxpl_id, H5D_chunk_iter_op_t cb, void *op_data); diff --git a/src/H5Emodule.h b/src/H5Emodule.h index 5abdb6a..c827d70 100644 --- a/src/H5Emodule.h +++ b/src/H5Emodule.h @@ -84,24 +84,24 @@ * an error stack ID is needed as a parameter, \ref H5E_DEFAULT can be used to indicate the library’s default * stack. The first error record of the error stack, number #000, is produced by the API function itself and * is usually sufficient to indicate to the application what went wrong. - * <table> - * <caption align=top>Example: An Error Message</caption> - * <tr> - * <td> - * <p>If an application calls \ref H5Tclose on a + * <table> + * <caption align=top>Example: An Error Message</caption> + * <tr> + * <td> + * <p>If an application calls \ref H5Tclose on a * predefined datatype then the following message is * printed on the standard error stream. This is a * simple error that has only one component, the API * function; other errors may have many components. - * <p><code><pre> + * <p><code><pre> * HDF5-DIAG: Error detected in HDF5 (1.10.9) thread 0. * #000: H5T.c line ### in H5Tclose(): predefined datatype * major: Function argument * minor: Bad value - * </pre></code> - * </td> - * </tr> - * </table> + * </pre></code> + * </td> + * </tr> + * </table> * In the example above, we can see that an error record has a major message and a minor message. A major * message generally indicates where the error happens. The location can be a dataset or a dataspace, for * example. A minor message explains further details of the error. An example is “unable to open file”. diff --git a/src/H5FDmpio.h b/src/H5FDmpio.h index ba508eb..a70f34b 100644 --- a/src/H5FDmpio.h +++ b/src/H5FDmpio.h @@ -104,10 +104,10 @@ H5_DLL herr_t H5Pset_fapl_mpio(hid_t fapl_id, MPI_Comm comm, MPI_Info info); * \param[out] info MPI-2 info object * \returns \herr_t * - * \details H5Pget_fapl_mpio() returns duplicates of the stored MPI communicator + * \details If the file access property list is set to the #H5FD_MPIO driver, + * H5Pget_fapl_mpio() returns duplicates of the stored MPI communicator * and Info object through the \p comm and \p info pointers, if those - * values are non-null. The file access property list must be set to the - * #H5FD_MPIO driver. + * values are non-null. * * Since the MPI communicator and Info object are duplicates of the * stored information, future modifications to the access property list diff --git a/src/H5FDpublic.h b/src/H5FDpublic.h index c66a46c..556dd1f 100644 --- a/src/H5FDpublic.h +++ b/src/H5FDpublic.h @@ -462,7 +462,26 @@ H5_DLL herr_t H5FDtruncate(H5FD_t *file, hid_t dxpl_id, hbool_t closing); H5_DLL herr_t H5FDlock(H5FD_t *file, hbool_t rw); H5_DLL herr_t H5FDunlock(H5FD_t *file); -/* Allows querying a VFD ID for features before the file is opened */ +/** + * \ingroup H5FD + * + * \brief Allows querying a VFD ID for features before the file is opened + * + * \param[in] driver_id Virtual File Driver (VFD) ID + * \param[out] flags VFD flags supported + * + * \return \herr_t + * + * \details Queries a virtual file driver (VFD) for feature flags. Takes a + * VFD hid_t so it can be used before the file is opened. For example, + * this could be used to check if a VFD supports SWMR. + * + * \note The flags obtained here are just those of the base driver and + * do not take any configuration options (e.g., set via a fapl + * call) into consideration. + * + * \since 1.10.2 + */ H5_DLL herr_t H5FDdriver_query(hid_t driver_id, unsigned long *flags /*out*/); #ifdef __cplusplus diff --git a/src/H5Fmodule.h b/src/H5Fmodule.h index 523d6bf..6939f4a 100644 --- a/src/H5Fmodule.h +++ b/src/H5Fmodule.h @@ -411,204 +411,15 @@ * </tr> * </table> * - * <table> - * <caption>File creation property list functions </caption> - * <tr> - * <th>Function</th> - * <th>Purpose</th> - * </tr> - * <tr> - * <td>#H5Pset_userblock/#H5Pget_userblock</td> - * <td>Sets/retrieves size of userblock.</td> - * </tr> - * <tr> - * <td>#H5Pset_sizes/#H5Pget_sizes</td> - * <td>Sets/retrieves byte size of offsets and lengths used to address objects in HDF5 file.</td> - * </tr> - * <tr> - * <td>#H5Pset_sym_k/#H5Pget_sym_k</td> - * <td>Sets/retrieves size of parameters used to control symbol table nodes.</td> - * </tr> - * <tr> - * <td>#H5Pset_istore_k/#H5Pget_istore_k</td> - * <td>Sets/retrieves size of parameter used to control B-trees for indexing chunked datasets.</td> - * </tr> - * <tr> - * <td>#H5Pset_file_image</td> - * <td>Sets an initial file image in a memory buffer.</td> - * </tr> - * <tr> - * <td>#H5Pget_file_image</td> - * <td>Retrieves a copy of the file image designated as the initial content and structure of a file.</td> - * </tr> - * <tr> - * <td>#H5Pset_shared_mesg_nindexes/#H5Pget_shared_mesg_nindexes</td> - * <td>Sets or retrieves number of shared object header message indexes in file - * creation property list.</td> - * </tr> - * <tr> - * <td>#H5Pset_shared_mesg_index</td> - * <td>Configures the specified shared object header message index.</td> - * </tr> - * <tr> - * <td>#H5Pget_shared_mesg_index</td> - * <td>Retrieves the configuration settings for a shared message index.</td> - * </tr> - * <tr> - * <td>#H5Pset_shared_mesg_phase_change/#H5Pget_shared_mesg_phase_change</td> - * <td>Sets or retrieves shared object header message storage phase change thresholds.</td> - * </tr> - * <tr> - * <td>#H5Pget_version</td> - * <td></td> - * </tr> - * </table> + * \anchor fcpl_table_tag File creation property list functions (H5P) + * \snippet{doc} tables/propertyLists.dox fcpl_table * - * <table> - * <caption>File access property list functions </caption> - * <tr> - * <th>Function</th> - * <th>Purpose</th> - * </tr> - * <tr> - * <td>#H5Pset_alignment/#H5Pget_alignment</td> - * <td>Sets/retrieves alignment properties.</td> - * </tr> - * <tr> - * <td>#H5Pset_cache/#H5Pget_cache</td> - * <td>Sets/retrieves metadata cache and raw data chunk cache parameters.</td> - * </tr> - * <tr> - * <td>#H5Pset_elink_file_cache_size/#H5Pget_elink_file_cache_size</td> - * <td>Sets/retrieves the size of the external link open file cache from the specified - * file access property list.</td> - * </tr> - * <tr> - * <td>#H5Pset_gc_references/#H5Pget_gc_references</td> - * <td>Sets/retrieves garbage collecting references flag.</td> - * </tr> - * <tr> - * <td>#H5Pset_family_offset</td> - * <td>Sets offset property for low-level access to a file in a family of files.</td> - * </tr> - * <tr> - * <td>#H5Pget_family_offset</td> - * <td>Retrieves a data offset from the file access property list.</td> - * </tr> - * <tr> - * <td>#H5Pset_meta_block_size/#H5Pget_meta_block_size</td> - * <td>Sets the minimum metadata blocksize or retrieves the current metadata block size setting.</td> - * </tr> - * <tr> - * <td>#H5Pset_mdc_config</td> - * <td>Set the initial metadata cache configuration in the indicated File Access Property List - * to the supplied value.</td> - * </tr> - * <tr> - * <td>#H5Pget_mdc_config</td> - * <td>Get the current initial metadata cache config-uration from the indicated File Access - * Property List.</td> - * </tr> - * <tr> - * <td>#H5Pset_sieve_buf_size/#H5Pget_sieve_buf_size</td> - * <td>Sets/retrieves maximum size of data sieve buffer.</td> - * </tr> - * <tr> - * <td>#H5Pset_libver_bounds</td> - * <td>Sets bounds on library versions, and indirectly format versions, to be used - * when creating objects.</td> - * </tr> - * <tr> - * <td>#H5Pget_libver_bounds</td> - * <td>Retrieves library version bounds settings that indirectly control the format - * versions used when creating objects.</td> - * </tr> - * <tr> - * <td>#H5Pset_small_data_block_size</td> - * <td>Sets the size of a contiguous block reserved for small data.</td> - * </tr> - * <tr> - * <td>#H5Pget_small_data_block_size</td> - * <td>Retrieves the current small data block size setting.</td> - * </tr> - * </table> + * \anchor fapl_table_tag File access property list functions (H5P) + * \snippet{doc} tables/propertyLists.dox fapl_table + * + * \anchor fd_pl_table_tag File driver property list functions (H5P) + * \snippet{doc} tables/propertyLists.dox fd_pl_table * - * <table> - * <caption>File driver functions </caption> - * <tr> - * <th>Function</th> - * <th>Purpose</th> - * </tr> - * <tr> - * <td>#H5Pset_driver</td> - * <td>Sets a file driver.</td> - * </tr> - * <tr> - * <td>#H5Pget_driver</td> - * <td>Returns the identifier for the driver used to create a file.</td> - * </tr> - * <tr> - * <td>#H5Pget_driver_info</td> - * <td>Returns a pointer to file driver information.</td> - * </tr> - * <tr> - * <td>#H5Pset_fapl_core/#H5Pget_fapl_core</td> - * <td>Sets the driver for buffered memory files (in RAM) or retrieves information regarding - * the driver.</td> - * </tr> - * <tr> - * <td>#H5Pset_fapl_direct/#H5Pget_fapl_direct</td> - * <td>Sets up use of the direct I/O driver or retrieves the direct I/O driver settings.</td> - * </tr> - * <tr> - * <td>#H5Pset_fapl_family/#H5Pget_fapl_family</td> - * <td>Sets driver for file families, designed for systems that do not support files - * larger than 2 gigabytes, or retrieves information regarding driver.</td> - * </tr> - * <tr> - * <td>#H5Pset_fapl_log</td> - * <td>Sets logging driver.</td> - * </tr> - * <tr> - * <td>#H5Pset_fapl_mpio/#H5Pget_fapl_mpio</td> - * <td>Sets driver for files on parallel file systems (MPI I/O) or retrieves information - * regarding the driver.</td> - * </tr> - * <tr> - * <td>H5Pset_fapl_mpiposix/H5Pget_fapl_mpiposix</td> - * <td>No longer available.</td> - * </tr> - * <tr> - * <td>#H5Pset_fapl_multi/#H5Pget_fapl_multi</td> - * <td>Sets driver for multiple files, separating categories of metadata and raw data, - * or retrieves information regarding driver.</td> - * </tr> - * <tr> - * <td>#H5Pset_fapl_sec2</td> - * <td>Sets driver for unbuffered permanent files or retrieves information regarding driver.</td> - * </tr> - * <tr> - * <td>#H5Pset_fapl_split</td> - * <td>Sets driver for split files, a limited case of multiple files with one metadata file - * and one raw data file.</td> - * </tr> - * <tr> - * <td>#H5Pset_fapl_stdio</td> - * <td>Sets driver for buffered permanent files.</td> - * </tr> - * <tr> - * <td>#H5Pset_fapl_windows</td> - * <td>Sets the Windows I/O driver.</td> - * </tr> - * <tr> - * <td>#H5Pset_multi_type</td> - * <td>Specifies type of data to be accessed via the MULTI driver enabling more direct access.</td> - * </tr> - * <tr> - * <td>#H5Pget_multi_type</td> - * <td>Retrieves type of data property for MULTI driver.</td> - * </tr> - * </table> * * \subsection subsec_file_create Creating or Opening an HDF5 File * This section describes in more detail how to create and how to open files. @@ -865,100 +676,7 @@ * #H5FD_SEC2. Alternative layouts and drivers are designed to suit the needs of a variety of * systems, environments, and applications. The drivers are listed in the table below. * - * <table> - * <caption id="table_file_drivers">Supported file drivers</caption> - * <tr> - * <th>Driver Name</th> - * <th>Driver Identifier</th> - * <th>Description</th> - * <th>Related API</th> - * </tr> - * <tr> - * <td>POSIX</td> - * <td>#H5FD_SEC2</td> - * <td>This driver uses POSIX file-system functions like read and write to perform I/O to a single, - * permanent file on local disk with no system buffering. This driver is POSIX-compliant and is - * the default file driver for all systems.</td> - * <td>#H5Pset_fapl_sec2</td> - * </tr> - * <tr> - * <td>Direct</td> - * <td>#H5FD_DIRECT</td> - * <td>This is the #H5FD_SEC2 driver except data is written to or read from the file - * synchronously without being cached by the system.</td> - * <td>#H5Pset_fapl_direct</td> - * </tr> - * <tr> - * <td>Log</td> - * <td>#H5FD_LOG</td> - * <td>This is the #H5FD_SEC2 driver with logging capabilities.</td> - * <td>#H5Pset_fapl_log</td> - * </tr> - * <tr> - * <td>Windows</td> - * <td>#H5FD_WINDOWS</td> - * <td>This driver was modified in HDF5-1.8.8 to be a wrapper of the POSIX driver, - * #H5FD_SEC2. This change should not affect user applications.</td> - * <td>#H5Pset_fapl_windows</td> - * </tr> - * <tr> - * <td>STDIO</td> - * <td>#H5FD_STDIO</td> - * <td>This driver uses functions from the standard C stdio.h to perform I/O - * to a single, permanent file on local disk with additional system buffering.</td> - * <td>#H5Pset_fapl_stdio</td> - * </tr> - * <tr> - * <td>Memory</td> - * <td>#H5FD_CORE</td> - * <td>With this driver, an application can work with a file in memory for faster reads and - * writes. File contents are kept in memory until the file is closed. At closing, the memory - * version of the file can be written back to disk or abandoned.</td> - * <td>#H5Pset_fapl_core</td> - * </tr> - * <tr> - * <td>Family</td> - * <td>#H5FD_FAMILY</td> - * <td>With this driver, the HDF5 file’s address space is partitioned into pieces and sent to - * separate storage files using an underlying driver of the user’s choice. This driver is for - * systems that do not support files larger than 2 gigabytes.</td> - * <td>#H5Pset_fapl_family</td> - * </tr> - * <tr> - * <td>Multi</td> - * <td>#H5FD_MULTI</td> - * <td>With this driver, data can be stored in multiple files according to the type of the data. - * I/O might work better if data is stored in separate files based on the type of data. The Split - * driver is a special case of this driver.</td> - * <td>#H5Pset_fapl_multi</td> - * </tr> - * <tr> - * <td>Split</td> - * <td>H5FD_SPLIT</td> - * <td>This file driver splits a file into two parts. One part stores metadata, and the other part - * stores raw data. This splitting a file into two parts is a limited case of the Multi driver.</td> - * <td>#H5Pset_fapl_split</td> - * </tr> - * <tr> - * <td>Parallel</td> - * <td>#H5FD_MPIO</td> - * <td>This is the standard HDF5 file driver for parallel file systems. This driver uses the MPI - * standard for both communication and file I/O.</td> - * <td>#H5Pset_fapl_mpio</td> - * </tr> - * <tr> - * <td>Parallel POSIX</td> - * <td>H5FD_MPIPOSIX</td> - * <td>This driver is no longer available</td> - * <td></td> - * </tr> - * <tr> - * <td>Stream</td> - * <td>H5FD_STREAM</td> - * <td>This driver is no longer available.</td> - * <td></td> - * </tr> - * </table> + * \snippet{doc} tables/fileDriverLists.dox supported_file_driver_table * * For more information, see the HDF5 Reference Manual entries for the function calls shown in * the column on the right in the table above. diff --git a/src/H5Gmodule.h b/src/H5Gmodule.h index a112a40..3946110 100644 --- a/src/H5Gmodule.h +++ b/src/H5Gmodule.h @@ -481,100 +481,7 @@ * </tr> * </table> * - * <table> - * <caption>Group creation property list functions</caption> - * <tr> - * <th>Function</th> - * <th>Purpose</th> - * </tr> - * <tr> - * <td>#H5Pall_filters_avail</td> - * <td>Verifies that all required filters are available.</td> - * </tr> - * <tr> - * <td>#H5Pget_filter</td> - * <td>Returns information about a filter in a pipeline. The - * C function is a macro: \see \ref api-compat-macros.</td> - * </tr> - * <tr> - * <td>#H5Pget_filter_by_id</td> - * <td>Returns information about the specified filter. The - * C function is a macro: \see \ref api-compat-macros.</td> - * </tr> - * <tr> - * <td>#H5Pget_nfilters</td> - * <td>Returns the number of filters in the pipeline.</td> - * </tr> - * <tr> - * <td>#H5Pmodify_filter</td> - * <td>Modifies a filter in the filter pipeline.</td> - * </tr> - * <tr> - * <td>#H5Premove_filter</td> - * <td>Deletes one or more filters in the filter pipeline.</td> - * </tr> - * <tr> - * <td>#H5Pset_deflate</td> - * <td>Sets the deflate (GNU gzip) compression method and compression level.</td> - * </tr> - * <tr> - * <td>#H5Pset_filter</td> - * <td>Adds a filter to the filter pipeline.</td> - * </tr> - * <tr> - * <td>#H5Pset_fletcher32</td> - * <td>Sets up use of the Fletcher32 checksum filter.</td> - * </tr> - * <tr> - * <td>#H5Pset_link_phase_change</td> - * <td>Sets the parameters for conversion between compact and dense groups.</td> - * </tr> - * <tr> - * <td>#H5Pget_link_phase_change</td> - * <td>Queries the settings for conversion between compact and dense groups.</td> - * </tr> - * <tr> - * <td>#H5Pset_est_link_info</td> - * <td>Sets estimated number of links and length of link names in a group.</td> - * </tr> - * <tr> - * <td>#H5Pget_est_link_info</td> - * <td>Queries data required to estimate required local heap or object header size.</td> - * </tr> - * <tr> - * <td>#H5Pset_nlinks</td> - * <td>Sets maximum number of soft or user-defined link traversals.</td> - * </tr> - * <tr> - * <td>#H5Pget_nlinks</td> - * <td>Retrieves the maximum number of link traversals.</td> - * </tr> - * <tr> - * <td>#H5Pset_link_creation_order</td> - * <td>Sets creation order tracking and indexing for links in a group.</td> - * </tr> - * <tr> - * <td>#H5Pget_link_creation_order</td> - * <td>Queries whether link creation order is tracked and/or indexed in a group.</td> - * </tr> - * <tr> - * <td>#H5Pset_create_intermediate_group</td> - * <td>Specifies in the property list whether to create missing intermediate groups.</td> - * </tr> - * <tr> - * <td>#H5Pget_create_intermediate_group</td> - * <td>Determines whether the property is set to enable creating missing intermediate groups.</td> - * </tr> - * <tr> - * <td>#H5Pset_char_encoding</td> - * <td>Sets the character encoding used to encode a string. Use to set ASCII or UTF-8 character - * encoding for object names.</td> - * </tr> - * <tr> - * <td>#H5Pget_char_encoding</td> - * <td>Retrieves the character encoding used to create a string.</td> - * </tr> - * </table> + * \snippet{doc} tables/propertyLists.dox gcpl_table * * <table> * <caption>Other external link functions</caption> @@ -1017,7 +924,7 @@ * containing thousands to millions of members. Links are stored in * a fractal heap and indexed with an improved B-tree. * \li The new implementation also enables the use of link names consisting of - * non-ASCII character sets (see H5Pset_char_encoding()) and is + * non-ASCII character sets (see #H5Pset_char_encoding) and is * required for all link types other than hard or soft links, e.g., * external and user-defined links (see the \ref H5L APIs). * diff --git a/src/H5Gpublic.h b/src/H5Gpublic.h index 74f0da7..a663395 100644 --- a/src/H5Gpublic.h +++ b/src/H5Gpublic.h @@ -120,7 +120,7 @@ extern "C" { * * \since 1.8.0 * - * \see H5Gopen2(), H5Gclose() + * \see H5Gopen2() * */ H5_DLL hid_t H5Gcreate2(hid_t loc_id, const char *name, hid_t lcpl_id, hid_t gcpl_id, hid_t gapl_id); @@ -167,7 +167,7 @@ H5_DLL hid_t H5Gcreate2(hid_t loc_id, const char *name, hid_t lcpl_id, hid_t gcp * H5Gclose() when the group is no longer needed so that resource * leaks will not develop. * - * \see H5Olink(), H5Dcreate(), \ref api-compat-macros + * \see H5Olink(), H5Gcreate() * * \since 1.8.0 * @@ -199,7 +199,7 @@ H5_DLL hid_t H5Gcreate_anon(hid_t loc_id, hid_t gcpl_id, hid_t gapl_id); * * \since 1.8.0 * - * \see H5Gcreate2(), H5Gclose() + * \see H5Gcreate2() * */ H5_DLL hid_t H5Gopen2(hid_t loc_id, const char *name, hid_t gapl_id); @@ -218,12 +218,10 @@ H5_DLL hid_t H5Gopen2(hid_t loc_id, const char *name, hid_t gapl_id); * property list associated with the group specified by \p group_id. * * The creation property list identifier should be released with - * H5Gclose() to prevent resource leaks. + * H5Pclose() to prevent resource leaks. * * \since 1.8.0 * - * \see H5Gcreate2(), H5Gclose() - * */ H5_DLL hid_t H5Gget_create_plist(hid_t group_id); @@ -250,8 +248,6 @@ H5_DLL hid_t H5Gget_create_plist(hid_t group_id); * * \since 1.8.0 * - * \see H5Gcreate2(), H5Gclose() - * */ H5_DLL herr_t H5Gget_info(hid_t loc_id, H5G_info_t *ginfo); @@ -284,8 +280,6 @@ H5_DLL herr_t H5Gget_info(hid_t loc_id, H5G_info_t *ginfo); * * \since 1.8.0 * - * \see H5Gcreate2(), H5Gclose() - * */ H5_DLL herr_t H5Gget_info_by_name(hid_t loc_id, const char *name, H5G_info_t *ginfo, hid_t lapl_id); @@ -331,8 +325,6 @@ H5_DLL herr_t H5Gget_info_by_name(hid_t loc_id, const char *name, H5G_info_t *gi * * \since 1.8.0 * - * \see H5Gcreate2(), H5Gclose() - * */ H5_DLL herr_t H5Gget_info_by_idx(hid_t loc_id, const char *group_name, H5_index_t idx_type, H5_iter_order_t order, hsize_t n, H5G_info_t *ginfo, hid_t lapl_id); @@ -360,8 +352,6 @@ H5_DLL herr_t H5Gget_info_by_idx(hid_t loc_id, const char *group_name, H5_index_ * * \since 1.8.0 * - * \see H5Gcreate2(), H5Gclose() - * */ H5_DLL herr_t H5Gflush(hid_t group_id); @@ -385,8 +375,6 @@ H5_DLL herr_t H5Gflush(hid_t group_id); * * \since 1.8.0 * - * \see H5Gcreate2(), H5Gclose() - * */ H5_DLL herr_t H5Grefresh(hid_t group_id); diff --git a/src/H5MMpublic.h b/src/H5MMpublic.h index 70ac644..d4aba98 100644 --- a/src/H5MMpublic.h +++ b/src/H5MMpublic.h @@ -14,8 +14,6 @@ /*------------------------------------------------------------------------- * * Created: H5MMpublic.h - * Jul 10 1997 - * Robb Matzke * * Purpose: Public declarations for the H5MM (memory management) * package. diff --git a/src/H5Pmodule.h b/src/H5Pmodule.h index 0dd675a..7f0dce9 100644 --- a/src/H5Pmodule.h +++ b/src/H5Pmodule.h @@ -789,9 +789,9 @@ * <li>\ref subsec_file_property_lists</li> * <li>\ref subsubsec_file_examples_props</li> * <li>\ref subsubsec_file_examples_access</li> - * <li>"File creation property list functions (H5P)"</li> - * <li>"File access property list functions (H5P)"</li> - * <li>"File driver functions (H5P)"</li></ul> + * <li>\ref dcpl_table_tag "Dataset creation property list functions (H5P)"</li> + * <li>\ref fapl_table_tag "File access property list functions (H5P)"</li> + * <li>\ref fd_pl_table_tag "File driver property list functions (H5P)"</li></ul> * \li In the \ref sec_attribute chapter, see "Attribute creation property list functions (H5P)". * \li In the \ref sec_group chapter, see "Group creation property list functions (H5P)". * \li Property lists are discussed throughout \ref sec_dataset. @@ -799,16 +799,16 @@ * All property list functions are described in the \ref H5P section of the * \ref RM. The function index at the top of the page provides a categorized listing * grouped by property list class. Those classes are listed below: - * \li File creation properties - * \li File access properties - * \li Group creation properties - * \li Dataset creation properties - * \li Dataset access properties - * \li Dataset transfer properties - * \li Link creation properties - * \li Link access properties - * \li Object creation properties - * \li Object copy properties + * \li \ref FCPL + * \li \ref FAPL + * \li \ref GCPL + * \li \ref DCPL + * \li \ref DAPL + * \li \ref DXPL + * \li \ref LCPL + * \li \ref LAPL + * \li \ref OCPL + * \li \ref OCPYPL * * Additional categories not related to the class structure are as follows: * \li General property list operations @@ -894,135 +894,186 @@ * or writing data. Property lists can be modified by adding or changing * properties. Property lists are deleted by closing the associated handles. * - * <table> - * <tr><th>Create</th><th>Read</th></tr> - * <tr valign="top"> - * <td> - * \snippet{lineno} H5P_examples.c create - * </td> - * <td> - * \snippet{lineno} H5P_examples.c read - * </td> - * <tr><th>Update</th><th>Delete</th></tr> - * <tr valign="top"> - * <td> - * \snippet{lineno} H5P_examples.c update - * </td> - * <td> - * \snippet{lineno} H5P_examples.c delete - * </td> - * </tr> - * </table> + * \ref PLCR + * \snippet{doc} tables/propertyLists.dox plcr_table + * + * \ref PLCR + * \snippet{doc} tables/propertyLists.dox plcra_table + * + * \ref PLCR / \ref OCPL / \ref GCPL + * \snippet{doc} tables/propertyLists.dox fcpl_table + * + * \ref PLCR + * \snippet{doc} tables/propertyLists.dox fapl_table + * \snippet{doc} tables/propertyLists.dox fd_pl_table + * + * \ref PLCR + * \snippet{doc} tables/propertyLists.dox lapl_table + * + * \ref PLCR / \ref OCPL + * \snippet{doc} tables/propertyLists.dox dcpl_table + * + * \ref PLCR / \ref LAPL + * \snippet{doc} tables/propertyLists.dox dapl_table + * + * \ref PLCR / \ref OCPL + * \snippet{doc} tables/propertyLists.dox gcpl_table + * + * \ref PLCR / \ref LAPL + * \snippet{doc} tables/propertyLists.dox gapl_table + * + * \ref PLCR + * \snippet{doc} tables/propertyLists.dox ocpl_table + * + * \ref PLCR + * \snippet{doc} tables/propertyLists.dox ocpypl_table + * + * \ref PLCR + * \snippet{doc} tables/propertyLists.dox strcpl_table + * + * \ref PLCR / \ref STRCPL + * \snippet{doc} tables/propertyLists.dox lcpl_table + * + * \ref PLCR / \ref STRCPL + * \snippet{doc} tables/propertyLists.dox acpl_table + * * * \defgroup STRCPL String Creation Properties + * \ingroup H5P * Currently, there are only two creation properties that you can use to control * the creation of HDF5 attributes and links. The first creation property, the * choice of a character encoding, applies to both attributes and links. * The second creation property applies to links only, and advises the library * to automatically create missing intermediate groups when creating new objects. - * \ingroup H5P + * + * \snippet{doc} tables/propertyLists.dox strcpl_table * * \defgroup LCPL Link Creation Properties - * The first creation property, the choice of a character encoding, applies to - * both attributes and links. - * The second creation property applies to links only, and advises the library - * to automatically create missing intermediate groups when creating new objects. * \ingroup STRCPL + * This creation property applies to links only, and advises the library + * to automatically create missing intermediate groups when creating new objects. + * + * \snippet{doc} tables/propertyLists.dox lcpl_table * * @see STRCPL * * \defgroup ACPL Attribute Creation Properties - * The creation property, the choice of a character encoding, applies to attributes. * \ingroup STRCPL + * The creation property, the choice of a character encoding, applies to attributes. + * + * \snippet{doc} tables/propertyLists.dox acpl_table * * @see STRCPL * * \defgroup LAPL Link Access Properties * \ingroup H5P * + * \snippet{doc} tables/propertyLists.dox lapl_table + * * \defgroup DAPL Dataset Access Properties + * \ingroup LAPL * Use dataset access properties to modify the default behavior of the HDF5 * library when accessing datasets. The properties include adjusting the size * of the chunk cache, providing prefixes for external content and virtual * dataset file paths, and controlling flush behavior, etc. These properties * are \Emph{not} persisted with datasets, and can be adjusted at runtime before * a dataset is created or opened. - * \ingroup LAPL + * + * \snippet{doc} tables/propertyLists.dox dapl_table * * \defgroup DCPL Dataset Creation Properties + * \ingroup OCPL * Use dataset creation properties to control aspects of dataset creation such * as fill time, storage layout, compression methods, etc. * Unlike dataset access and transfer properties, creation properties \Emph{are} * stored with the dataset, and cannot be changed once a dataset has been * created. - * \ingroup OCPL + * + * \snippet{doc} tables/propertyLists.dox dcpl_table * * \defgroup DXPL Dataset Transfer Properties + * \ingroup H5P * Use dataset transfer properties to customize certain aspects of reading * and writing datasets such as transformations, MPI-IO I/O mode, error * detection, etc. These properties are \Emph{not} persisted with datasets, * and can be adjusted at runtime before a dataset is read or written. - * \ingroup H5P + * + * \snippet{doc} tables/propertyLists.dox dxpl_table * * \defgroup FAPL File Access Properties + * \ingroup H5P * Use file access properties to modify the default behavior of the HDF5 * library when accessing files. The properties include selecting a virtual * file driver (VFD), configuring the metadata cache (MDC), control * file locking, etc. These properties are \Emph{not} persisted with files, and * can be adjusted at runtime before a file is created or opened. - * \ingroup H5P + * + * \snippet{doc} tables/propertyLists.dox fapl_table + * \snippet{doc} tables/propertyLists.dox fd_pl_table * * \defgroup FCPL File Creation Properties + * \ingroup GCPL * Use file creation properties to control aspects of file creation such * as setting a file space management strategy or creating a user block. * Unlike file access properties, creation properties \Emph{are} * stored with the file, and cannot be changed once a file has been * created. - * \ingroup GCPL * - * \defgroup GAPL General Access Properties - * The functions in this section can be applied to different kinds of property - * lists. + * \snippet{doc} tables/propertyLists.dox fcpl_table + * + * \defgroup GAPL Group Access Properties * \ingroup LAPL + * The functions in this section can be applied to group property lists. + * + * \snippet{doc} tables/propertyLists.dox gapl_table * * \defgroup GCPL Group Creation Properties + * \ingroup OCPL * Use group creation properties to control aspects of group creation such * as storage layout, compression, and link creation order tracking. * Unlike file access properties, creation properties \Emph{are} * stored with the group, and cannot be changed once a group has been * created. - * \ingroup OCPL + * + * \snippet{doc} tables/propertyLists.dox gcpl_table * * \defgroup PLCR Property List Class Root - * Use the functions in this module to manage HDF5 property lists. * \ingroup H5P + * Use the functions in this module to manage HDF5 property lists. + * + * \snippet{doc} tables/propertyLists.dox plcr_table * * \defgroup PLCRA Property List Class Root (Advanced) + * \ingroup H5P * You can create and customize user-defined property list classes using the * functions described below. Arbitrary user-defined properties can also * be inserted into existing property lists as so-called temporary properties. - * \ingroup H5P * + * \snippet{doc} tables/propertyLists.dox plcra_table * * \defgroup OCPL Object Creation Properties * \ingroup H5P * + * \snippet{doc} tables/propertyLists.dox ocpl_table + * * \defgroup OCPYPL Object Copy Properties * \ingroup H5P * + * \snippet{doc} tables/propertyLists.dox ocpypl_table + * * \defgroup FMPL File Mount Properties - * Empty property class. * \ingroup H5P + * Empty property class. * * * \defgroup TCPL Datatype Creation Properties - * TCPL isn't supported yet. * \ingroup OCPL + * TCPL isn't supported yet. * * * \defgroup TAPL Datatype Access Properties - * TAPL isn't supported yet. * \ingroup LAPL + * TAPL isn't supported yet. * * * diff --git a/src/H5Ppublic.h b/src/H5Ppublic.h index 2890a5a..a3a1a9b 100644 --- a/src/H5Ppublic.h +++ b/src/H5Ppublic.h @@ -5519,6 +5519,9 @@ H5_DLL herr_t H5Pget_dset_no_attrs_hint(hid_t dcpl_id, hbool_t *minimize); * are null pointers then the corresponding information is not * returned. * + * \note On Windows, off_t is typically a 32-bit signed long value, which + * limits the valid offset that can be returned to 2 GiB. + * * \version 1.6.4 \p idx parameter type changed to unsigned. * \since 1.0.0 * @@ -7898,9 +7901,8 @@ H5_DLL herr_t H5Pget_mpio_no_collective_cause(hid_t plist_id, uint32_t *local_no uint32_t *global_no_collective_cause); #endif /* H5_HAVE_PARALLEL */ -/* Link creation property list (LCPL) routines */ /** - * \ingroup STRCPL + * \ingroup LCPL * * \brief Determines whether property is set to enable creating missing * intermediate groups @@ -7931,7 +7933,7 @@ H5_DLL herr_t H5Pget_mpio_no_collective_cause(hid_t plist_id, uint32_t *local_no */ H5_DLL herr_t H5Pget_create_intermediate_group(hid_t plist_id, unsigned *crt_intmd /*out*/); /** - * \ingroup STRCPL + * \ingroup LCPL * * \brief Specifies in property list whether to create missing * intermediate groups @@ -8265,9 +8267,8 @@ H5_DLL herr_t H5Pset_link_phase_change(hid_t plist_id, unsigned max_compact, uns */ H5_DLL herr_t H5Pset_local_heap_size_hint(hid_t plist_id, size_t size_hint); -/* String creation property list (STRCPL) routines */ /** - * \ingroup STRCPL + * \ingroup ACPL * * \brief Retrieves the character encoding used to create a link or * attribute name @@ -8296,7 +8297,7 @@ H5_DLL herr_t H5Pset_local_heap_size_hint(hid_t plist_id, size_t size_hint); */ H5_DLL herr_t H5Pget_char_encoding(hid_t plist_id, H5T_cset_t *encoding /*out*/); /** - * \ingroup STRCPL + * \ingroup ACPL * * \brief Sets the character encoding used to encode link and attribute * names diff --git a/src/H5Tmodule.h b/src/H5Tmodule.h index 83f7467..590a60c 100644 --- a/src/H5Tmodule.h +++ b/src/H5Tmodule.h @@ -3872,26 +3872,6 @@ filled according to the value of this property. The padding can be: * to HDF5 files and linked to groups as HDF5 datatype objects or so-called * \Emph{committed datatypes}. * - * <table> - * <tr><th>Create</th><th>Read</th></tr> - * <tr valign="top"> - * <td> - * \snippet{lineno} H5T_examples.c create - * </td> - * <td> - * \snippet{lineno} H5T_examples.c read - * </td> - * <tr><th>Update</th><th>Delete</th></tr> - * <tr valign="top"> - * <td> - * \snippet{lineno} H5T_examples.c update - * </td> - * <td> - * \snippet{lineno} H5T_examples.c delete - * </td> - * </tr> - * </table> - * * \defgroup ARRAY Array Datatypes * \ingroup H5T * \defgroup ATOM Atomic Datatypes @@ -3912,33 +3892,36 @@ filled according to the value of this property. The padding can be: * * \defgroup PDT Predefined Datatypes * \ingroup H5T - * \details What is a predefined HDF5 datatype? - * \todo Fill in the blanks! * * \defgroup PDTCPU By CPU * \ingroup PDT * \details CPU-specific datatypes * \defgroup PDTALPHA DEC Alpha * \ingroup PDTCPU + * \snippet{doc} tables/predefinedDatatypes.dox predefined_dec_datatypes_table * \defgroup PDTX86 AMD & INTEL * \ingroup PDTCPU + * \snippet{doc} tables/predefinedDatatypes.dox predefined_intel_datatypes_table * \defgroup PDTMIPS SGI MIPS * \ingroup PDTCPU + * \snippet{doc} tables/predefinedDatatypes.dox predefined_mips_datatypes_table * * \defgroup PDTIEEE IEEE * \ingroup PDT * \details The IEEE floating point types in big- and little-endian byte orders. + * \snippet{doc} tables/predefinedDatatypes.dox predefined_ieee_datatypes_table * * \defgroup PDTSTD Standard Datatypes * \ingroup PDT * \details These are "standard" types. For instance, signed (2's complement) * and unsigned integers of various sizes in big- and little-endian * byte orders. + * \snippet{doc} tables/predefinedDatatypes.dox predefined_std_datatypes_table * * \defgroup PDTUNIX UNIX-specific Datatypes * \ingroup PDT * \details Types which are particular to Unix. - * \todo Fill in the blanks! + * \snippet{doc} tables/predefinedDatatypes.dox predefined_unix_datatypes_table * * \defgroup PDTNAT Native Datatypes * \ingroup PDT @@ -3952,13 +3935,16 @@ filled according to the value of this property. The padding can be: * \li The datatype \c LLONG corresponds C's \Code{long long} and * \c LDOUBLE is \Code{long double}. These types might be the same * as \c LONG and \c DOUBLE, respectively. + * \snippet{doc} tables/predefinedDatatypes.dox predefined_native_datatypes_table + * * \defgroup PDTC9x C9x Integer Datatypes * \ingroup PDTNAT * \details C9x integer types - * \todo Fill in the blanks! + * \snippet{doc} tables/predefinedDatatypes.dox predefined_c9x_datatypes_table * * \defgroup PDTS Strings * \ingroup PDT + * \snippet{doc} tables/predefinedDatatypes.dox predefined_string_datatypes_table * */ |