Files
hdf5/develop/_d_d_l_b_n_f114.html
T
2026-09-19 01:23:29 +00:00

796 lines
43 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>HDF5: DDL in BNF for HDF5 1.14.4 and above</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(function() { init_search(); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="hdf5doxy.css" rel="stylesheet" type="text/css"/>
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
<link href="hdf5doxy.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="hdf5_navtree_hacks.js"></script>
<div style="background:#FFDDDD;font-size:120%;text-align:center;margin:0;padding:5px">Help us improve by taking our short survey: <a href="https://www.hdfgroup.org/website-survey/">https://www.hdfgroup.org/website-survey/</a></div>
<!-- ... other metadata & script includes ... -->
<script type="text/javascript" src="doxygen-awesome-tabs.js"></script>
<script type="text/javascript">
DoxygenAwesomeTabs.init()
</script>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-57FMZK4S7X"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-57FMZK4S7X');
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="HDFG-logo.png"/></td>
<td id="projectalign">
<div id="projectname">HDF5<span id="projectnumber">&#160;Last Updated on 2026-09-19</span>
</div>
<div id="projectbrief">The HDF5 Field Guide</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<div id="main-nav">
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="_getting_started.html"><span>Getting&#160;started</span></a></li>
<li><a href="_u_g.html"><span>User&#160;Guide</span></a></li>
<li><a href="_r_m.html"><span>Reference&#160;Manual</span></a></li>
<li><a href="_cookbook.html"><span>Cookbook</span></a></li>
<li><a href="_t_n.html"><span>Technical&#160;Notes</span></a></li>
<li><a href="_r_f_c.html"><span>RFCs</span></a></li>
<li><a href="_s_p_e_c.html"><span>Specifications</span></a></li>
<li><a href="_g_l_s.html"><span>Glossary</span></a></li>
<li><a href="_f_t_s.html"><span>Full-Text&#160;Search</span></a></li>
<li><a href="_about.html"><span>About</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" class="search-icon" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()"><span class="search-icon-dropdown"></span></span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- main-nav -->
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('_d_d_l_b_n_f114.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">DDL in BNF for HDF5 1.14.4 and above </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Navigate back: <a class="el" href="index.html" title="notitle">Main</a> / <a class="el" href="_s_p_e_c.html" title="Specifications">Specifications</a> </p><hr />
<h1 class="doxsection"><a class="anchor" id="intro114"></a>
Introduction</h1>
<p>This document contains the data description language (DDL) for an HDF5 file. The description is in Backus-Naur Form (BNF).</p>
<h1 class="doxsection"><a class="anchor" id="expo114"></a>
Explanation of Symbols</h1>
<p>This section contains a brief explanation of the symbols used in the DDL.</p>
<div class="fragment"><div class="line">::= defined as</div>
<div class="line"> &lt;tname&gt; a token with the name tname</div>
<div class="line"> &lt;a&gt; | &lt;b&gt; one of &lt;a&gt; or &lt;b&gt;</div>
<div class="line"> &lt;a&gt;opt zero or one occurrence of &lt;a&gt;</div>
<div class="line"> &lt;a&gt;* zero or more occurrence of &lt;a&gt;</div>
<div class="line"> &lt;a&gt;+ one or more occurrence of &lt;a&gt;</div>
<div class="line"> [0-9] an element in the range between 0 and 9</div>
<div class="line"> &#39;[&#39; the token within the quotes (used for special characters)</div>
<div class="line"> TBD To Be Decided</div>
</div><!-- fragment --><h1 class="doxsection"><a class="anchor" id="ddl114"></a>
The DDL</h1>
<div class="fragment"><div class="line">&lt;file&gt; ::= HDF5 &lt;file_name&gt; { &lt;file_super_block&gt;opt &lt;root_group&gt; }</div>
<div class="line"> </div>
<div class="line">&lt;file_name&gt; ::= &lt;identifier&gt;</div>
<div class="line"> </div>
<div class="line">&lt;file_super_block&gt; ::= SUPER_BLOCK {</div>
<div class="line"> SUPERBLOCK_VERSION &lt;int_value&gt;</div>
<div class="line"> FREELIST_VERSION &lt;int_value&gt;</div>
<div class="line"> SYMBOLTABLE_VERSION &lt;int_value&gt;</div>
<div class="line"> OBJECTHEADER_VERSION &lt;int_value&gt;</div>
<div class="line"> OFFSET_SIZE &lt;int_value&gt;</div>
<div class="line"> LENGTH_SIZE &lt;int_value&gt;</div>
<div class="line"> BTREE_RANK &lt;int_value&gt;</div>
<div class="line"> BTREE_LEAF &lt;int_value&gt;</div>
<div class="line"> ISTORE_K &lt;int_value&gt;</div>
<div class="line"> &lt;super_block_filespace&gt;</div>
<div class="line"> USER_BLOCK {</div>
<div class="line"> USERBLOCK_SIZE &lt;int_value&gt;</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;super_block_filespace&gt; ::= FILE_SPACE_STRATEGY &lt;super_block_strategy&gt;</div>
<div class="line"> FREE_SPACE_PERSIST &lt;boolean_value&gt;</div>
<div class="line"> FREE_SPACE_SECTION_THRESHOLD &lt;int_value&gt;</div>
<div class="line"> FILE_SPACE_PAGE_SIZE &lt;int_value&gt;</div>
<div class="line"> </div>
<div class="line">&lt;super_block_strategy&gt; ::= H5F_FSPACE_STRATEGY_FSM_AGGR | H5F_FSPACE_STRATEGY_PAGE |</div>
<div class="line"> H5F_FSPACE_STRATEGY_AGGR | H5F_FSPACE_STRATEGY_NONE |</div>
<div class="line"> Unknown strategy</div>
<div class="line"> </div>
<div class="line">&lt;root_group&gt; ::= GROUP &quot;/&quot; {</div>
<div class="line"> &lt;anon_named_datatype&gt;*</div>
<div class="line"> &lt;object_id&gt;opt</div>
<div class="line"> &lt;group_comment&gt;opt</div>
<div class="line"> &lt;group_attribute&gt;*</div>
<div class="line"> &lt;group_member&gt;*</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;datatype&gt; ::= &lt;atomic_type&gt; | &lt;compound_type&gt; | &lt;variable_length_type&gt; | &lt;array_type&gt;</div>
<div class="line"> </div>
<div class="line">&lt;anon_named_datatype&gt; ::= DATATYPE &lt;anon_named_type_name&gt; {</div>
<div class="line"> &lt;datatype&gt;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;anon_named_type_name&gt; ::= the assigned name for anonymous named type is</div>
<div class="line"> in the form of #oid, where oid is the object id</div>
<div class="line"> of the type</div>
<div class="line"> </div>
<div class="line">&lt;atomic_type&gt; ::= &lt;integer&gt; | &lt;float&gt; | &lt;time&gt; | &lt;string&gt; |</div>
<div class="line"> &lt;bitfield&gt; | &lt;opaque&gt; | &lt;reference&gt; | &lt;enum&gt;</div>
<div class="line"> </div>
<div class="line">&lt;boolean_value&gt; ::= FALSE | TRUE</div>
<div class="line"> </div>
<div class="line">&lt;integer&gt; ::= H5T_STD_I8BE | H5T_STD_I8LE |</div>
<div class="line"> H5T_STD_I16BE | H5T_STD_I16LE |</div>
<div class="line"> H5T_STD_I32BE | H5T_STD_I32LE |</div>
<div class="line"> H5T_STD_I64BE | H5T_STD_I64LE |</div>
<div class="line"> H5T_STD_U8BE | H5T_STD_U8LE |</div>
<div class="line"> H5T_STD_U16BE | H5T_STD_U16LE |</div>
<div class="line"> H5T_STD_U32BE | H5T_STD_U32LE |</div>
<div class="line"> H5T_STD_U64BE | H5T_STD_U64LE |</div>
<div class="line"> H5T_NATIVE_CHAR | H5T_NATIVE_UCHAR |</div>
<div class="line"> H5T_NATIVE_SHORT | H5T_NATIVE_USHORT |</div>
<div class="line"> H5T_NATIVE_INT | H5T_NATIVE_UINT |</div>
<div class="line"> H5T_NATIVE_LONG | H5T_NATIVE_ULONG |</div>
<div class="line"> H5T_NATIVE_LLONG | H5T_NATIVE_ULLONG</div>
<div class="line"> </div>
<div class="line">&lt;float&gt; ::= H5T_IEEE_F16BE | H5T_IEEE_F16LE | </div>
<div class="line"> H5T_IEEE_F32BE | H5T_IEEE_F32LE |</div>
<div class="line"> H5T_IEEE_F64BE | H5T_IEEE_F64LE |</div>
<div class="line"> H5T_NATIVE_FLOAT16 | H5T_NATIVE_FLOAT | </div>
<div class="line"> H5T_NATIVE_DOUBLE | H5T_NATIVE_LDOUBLE</div>
<div class="line"> </div>
<div class="line">&lt;time&gt; ::= H5T_TIME: not yet implemented</div>
<div class="line"> </div>
<div class="line">&lt;string&gt; ::= H5T_STRING {</div>
<div class="line"> STRSIZE &lt;strsize&gt;;</div>
<div class="line"> STRPAD &lt;strpad&gt;;</div>
<div class="line"> CSET &lt;cset&gt;;</div>
<div class="line"> CTYPE &lt;ctype&gt;;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;strsize&gt; ::= &lt;int_value&gt;</div>
<div class="line"> </div>
<div class="line">&lt;strpad&gt; ::= H5T_STR_NULLTERM | H5T_STR_NULLPAD | H5T_STR_SPACEPAD</div>
<div class="line"> </div>
<div class="line">&lt;cset&gt; ::= H5T_CSET_ASCII | H5T_CSET_UTF8</div>
<div class="line"> </div>
<div class="line">&lt;ctype&gt; ::= H5T_C_S1 | H5T_FORTRAN_S1</div>
<div class="line"> </div>
<div class="line">&lt;bitfield&gt; ::= H5T_STD_B8BE | H5T_STD_B8LE |</div>
<div class="line"> H5T_STD_B16BE | H5T_STD_B16LE |</div>
<div class="line"> H5T_STD_B32BE | H5T_STD_B32LE |</div>
<div class="line"> H5T_STD_B64BE | H5T_STD_B64LE</div>
<div class="line"> </div>
<div class="line">&lt;opaque&gt; ::= H5T_OPAQUE {</div>
<div class="line"> OPAQUE_TAG &lt;identifier&gt;;</div>
<div class="line"> OPAQUE_SIZE &lt;int_value&gt;;opt</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;reference&gt; ::= H5T_REFERENCE { &lt;ref_type&gt; }</div>
<div class="line"> </div>
<div class="line">&lt;ref_type&gt; ::= H5T_STD_REF_OBJECT | H5T_STD_REF_DSETREG | H5T_STD_REF | UNDEFINED</div>
<div class="line"> </div>
<div class="line">&lt;compound_type&gt; ::= H5T_COMPOUND {</div>
<div class="line"> &lt;member_type_def&gt;+</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;member_type_def&gt; ::= &lt;datatype&gt; &lt;field_name&gt;;</div>
<div class="line"> </div>
<div class="line">&lt;field_name&gt; ::= &lt;identifier&gt;</div>
<div class="line"> </div>
<div class="line">&lt;variable_length_type&gt; ::= H5T_VLEN { &lt;datatype&gt; }</div>
<div class="line"> </div>
<div class="line">&lt;array_type&gt; ::= H5T_ARRAY { &lt;dim_sizes&gt; &lt;datatype&gt; }</div>
<div class="line"> </div>
<div class="line">&lt;dim_sizes&gt; ::= &#39;[&#39;&lt;dimsize&gt;&#39;]&#39; | &#39;[&#39;&lt;dimsize&gt;&#39;]&#39;&lt;dim_sizes&gt;</div>
<div class="line"> </div>
<div class="line">&lt;dimsize&gt; ::= &lt;int_value&gt;</div>
<div class="line"> </div>
<div class="line">&lt;attribute&gt; ::= ATTRIBUTE &lt;attr_name&gt; {</div>
<div class="line"> &lt;dataset_type&gt;</div>
<div class="line"> &lt;dataset_space&gt;</div>
<div class="line"> &lt;data&gt;opt</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;attr_name&gt; ::= &lt;identifier&gt;</div>
<div class="line"> </div>
<div class="line">&lt;dataset_type&gt; ::= DATATYPE &lt;path_name&gt; | &lt;datatype&gt;</div>
<div class="line"> </div>
<div class="line">&lt;enum&gt; ::= H5T_ENUM {</div>
<div class="line"> &lt;enum_base_type&gt; &lt;enum_def&gt;+</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;enum_base_type&gt; ::= &lt;integer&gt;</div>
<div class="line">// Currently enums can only hold integer type data, but they may be expanded</div>
<div class="line">// in the future to hold any datatype</div>
<div class="line"> </div>
<div class="line">&lt;enum_def&gt; ::= &lt;enum_symbol&gt; &lt;enum_val&gt;;</div>
<div class="line"> </div>
<div class="line">&lt;enum_symbol&gt; ::= &lt;identifier&gt;</div>
<div class="line"> </div>
<div class="line">&lt;enum_val&gt; ::= &lt;int_value&gt;</div>
<div class="line"> </div>
<div class="line">&lt;path_name&gt; ::= &lt;path_part&gt;+</div>
<div class="line"> </div>
<div class="line">&lt;path_part&gt; ::= /&lt;identifier&gt;</div>
<div class="line"> </div>
<div class="line">&lt;dataspace&gt; ::= &lt;scalar_space&gt; | &lt;simple_space&gt; | &lt;complex_space&gt; | &lt;null_space&gt;</div>
<div class="line"> </div>
<div class="line">&lt;null_space&gt; ::= NULL</div>
<div class="line"> </div>
<div class="line">&lt;scalar_space&gt; ::= SCALAR</div>
<div class="line"> </div>
<div class="line">&lt;simple_space&gt; ::= SIMPLE { &lt;current_dims&gt; / &lt;max_dims&gt; }</div>
<div class="line"> </div>
<div class="line">&lt;complex_space&gt; ::= COMPLEX { &lt;complex_space_definition&gt; }</div>
<div class="line"> </div>
<div class="line">&lt;dataset_space&gt; ::= DATASPACE &lt;path_name&gt; | &lt;dataspace&gt;</div>
<div class="line"> </div>
<div class="line">&lt;current_dims&gt; ::= &lt;dims&gt;</div>
<div class="line"> </div>
<div class="line">&lt;max_dims&gt; ::= &#39;(&#39; &lt;max_dim_list&gt; &#39;)&#39;</div>
<div class="line"> </div>
<div class="line">&lt;max_dim_list&gt; ::= &lt;max_dim&gt; | &lt;max_dim&gt;, &lt;max_dim_list&gt;</div>
<div class="line"> </div>
<div class="line">&lt;max_dim&gt; ::= &lt;int_value&gt; | H5S_UNLIMITED</div>
<div class="line"> </div>
<div class="line">&lt;data&gt; ::= &lt;subset&gt; | &lt;data_values&gt;</div>
<div class="line"> </div>
<div class="line">&lt;data_values&gt; ::= DATA {</div>
<div class="line"> &lt;scalar_space_data&gt; | &lt;simple_space_data&gt;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;scalar_space_data&gt; ::= &lt;any_element&gt;</div>
<div class="line"> </div>
<div class="line">&lt;any_element&gt; ::= &lt;atomic_element&gt; | &lt;compound_element&gt; |</div>
<div class="line"> &lt;variable_length_element&gt; | &lt;array_element&gt;</div>
<div class="line"> </div>
<div class="line">&lt;any_data_seq&gt; ::= &lt;any_element&gt; | &lt;any_element&gt;, &lt;any_data_seq&gt;</div>
<div class="line"> </div>
<div class="line">&lt;atomic_element&gt; :: = &lt;integer_data&gt; | &lt;float_data&gt; | &lt;time_data&gt; |</div>
<div class="line"> &lt;string_data&gt; | &lt;bitfield_data&gt; | &lt;opaque_data&gt; |</div>
<div class="line"> &lt;enum_data&gt; | &lt;reference_data&gt;</div>
<div class="line"> </div>
<div class="line">&lt;subset&gt; ::= SUBSET {</div>
<div class="line"> &lt;start&gt;;</div>
<div class="line"> &lt;stride&gt;;</div>
<div class="line"> &lt;count&gt;;</div>
<div class="line"> &lt;block&gt;;</div>
<div class="line"> DATA {</div>
<div class="line"> &lt;simple_space_data&gt;</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;start&gt; ::= START (&lt;coor_list&gt;)</div>
<div class="line"> </div>
<div class="line">&lt;stride&gt; ::= STRIDE (&lt;pos_list&gt;)</div>
<div class="line"> </div>
<div class="line">&lt;count&gt; ::= COUNT (&lt;max_dim_list&gt;)</div>
<div class="line"> </div>
<div class="line">&lt;block&gt; ::= BLOCK (&lt;max_dim_list&gt;)</div>
<div class="line"> </div>
<div class="line">&lt;coor_list&gt; ::= &lt;coor_data&gt;, &lt;coor_list&gt; | &lt;coor_data&gt;</div>
<div class="line"> </div>
<div class="line">&lt;coor_data&gt; ::= &lt;integer_data&gt; | H5S_UNLIMITED</div>
<div class="line"> </div>
<div class="line">&lt;integer_data&gt; ::= &lt;int_value&gt;</div>
<div class="line"> </div>
<div class="line">&lt;float_data&gt; ::= a floating point number</div>
<div class="line"> </div>
<div class="line">&lt;time_data&gt; ::= DATA{ not yet implemented.}</div>
<div class="line"> </div>
<div class="line">&lt;string_data&gt; ::= a string</div>
<div class="line">// A string is enclosed in double quotes.</div>
<div class="line">// If a string is displayed on more than one line, string concatenate</div>
<div class="line">// operator &#39;//&#39;is used.</div>
<div class="line"> </div>
<div class="line">&lt;bitfield_data&gt; ::= &lt;hex_value&gt;</div>
<div class="line"> </div>
<div class="line">&lt;opaque_data&gt; ::= &lt;hex_value&gt;:&lt;hex_value&gt; | &lt;hex_value&gt;</div>
<div class="line"> </div>
<div class="line">&lt;enum_data&gt; ::= &lt;enum_symbol&gt;</div>
<div class="line"> </div>
<div class="line">&lt;reference_data&gt; ::= &lt;object_ref_data&gt; | &lt;data_region_data&gt; | &lt;attribute_data&gt; | NULL</div>
<div class="line"> </div>
<div class="line">&lt;object_ref_data&gt; ::= &lt;object_type&gt; &lt;object_ref&gt;</div>
<div class="line"> </div>
<div class="line">&lt;object_type&gt; ::= ATTRIBUTE | DATASET | GROUP | DATATYPE</div>
<div class="line"> </div>
<div class="line">&lt;object_ref&gt; ::= &lt;object_id&gt;</div>
<div class="line"> </div>
<div class="line">&lt;object_id&gt; ::= &lt;path_name&gt; | OBJECTID { &lt;object_num&gt; }</div>
<div class="line"> </div>
<div class="line">&lt;object_num&gt; ::= &lt;int_value&gt;:&lt;int_value&gt; | &lt;int_value&gt;</div>
<div class="line"> </div>
<div class="line">&lt;attribute_data&gt; ::= ATTRIBUTE &lt;attr_name&gt;opt</div>
<div class="line"> &lt;data&gt;opt</div>
<div class="line"> </div>
<div class="line">&lt;data_region_data&gt; ::= DATASET &lt;dataset_name&gt; {</div>
<div class="line"> &lt;data_region_type&gt;opt &lt;data_region_data_list&gt;</div>
<div class="line"> &lt;dataset_type&gt;opt &lt;dataset_space&gt;opt</div>
<div class="line"> &lt;data&gt;opt</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;data_region_type&gt; ::= REGION_TYPE &lt;data_region_data_type&gt;</div>
<div class="line"> </div>
<div class="line">&lt;data_region_data_type&gt; ::= POINT | BLOCK</div>
<div class="line"> </div>
<div class="line">&lt;data_region_data_list&gt; ::= &lt;data_region_data_info&gt;, &lt;data_region_data_list&gt; |</div>
<div class="line"> &lt;data_region_data_info&gt;</div>
<div class="line"> </div>
<div class="line">&lt;data_region_data_info&gt; ::= &lt;region_info&gt; | &lt;point_info&gt;</div>
<div class="line"> </div>
<div class="line">&lt;region_info&gt; ::= (&lt;lower_region_vals&gt;)-(&lt;upper_region_vals&gt;)</div>
<div class="line"> </div>
<div class="line">&lt;lower_region_vals&gt; ::= &lt;lower_bound&gt;, &lt;lower_region_vals&gt; | &lt;lower_bound&gt;</div>
<div class="line"> </div>
<div class="line">&lt;upper_region_vals&gt; ::= &lt;upper_bound&gt;, &lt;upper_region_vals&gt; | &lt;upper_bound&gt;</div>
<div class="line"> </div>
<div class="line">&lt;lower_bound&gt; ::= &lt;int_value&gt;</div>
<div class="line"> </div>
<div class="line">&lt;upper_bound&gt; ::= &lt;int_value&gt;</div>
<div class="line"> </div>
<div class="line">&lt;point_info&gt; ::= (&lt;point_vals&gt;)</div>
<div class="line"> </div>
<div class="line">&lt;point_vals&gt; ::= &lt;int_value&gt; | &lt;int_value&gt;, &lt;point_vals&gt;</div>
<div class="line"> </div>
<div class="line">&lt;compound_element&gt; ::= { &lt;any_data_seq&gt; }</div>
<div class="line"> </div>
<div class="line">&lt;atomic_simple_data&gt; :: = &lt;atomic_element&gt;, &lt;atomic_simple_data&gt; |</div>
<div class="line"> &lt;atomic_element&gt;</div>
<div class="line"> </div>
<div class="line">&lt;simple_space_data&gt; :: = &lt;any_data_seq&gt;</div>
<div class="line"> </div>
<div class="line">&lt;variable_length_element&gt; ::= ( &lt;any_data_seq&gt; )</div>
<div class="line"> </div>
<div class="line">&lt;array_element&gt; ::= &#39;[&#39; &lt;any_data_seq&gt; &#39;]&#39;</div>
<div class="line"> </div>
<div class="line">&lt;named_datatype&gt; ::= DATATYPE &lt;type_name&gt; { &lt;datatype&gt; }</div>
<div class="line"> </div>
<div class="line">&lt;type_name&gt; ::= &lt;identifier&gt;</div>
<div class="line"> </div>
<div class="line">&lt;hardlink&gt; ::= HARDLINK &lt;path_name&gt;</div>
<div class="line"> </div>
<div class="line">&lt;group&gt; ::= GROUP &lt;group_name&gt; { &lt;hardlink&gt; | &lt;group_info&gt; }</div>
<div class="line"> </div>
<div class="line">&lt;group_comment&gt; ::= COMMENT &lt;string_data&gt;</div>
<div class="line"> </div>
<div class="line">&lt;group_name&gt; ::= &lt;identifier&gt;</div>
<div class="line"> </div>
<div class="line">&lt;group_info&gt; ::= &lt;object_id&gt;opt &lt;group_comment&gt;opt &lt;group_attribute&gt;*</div>
<div class="line"> &lt;group_member&gt;*</div>
<div class="line"> </div>
<div class="line">&lt;group_attribute&gt; ::= &lt;attribute&gt;</div>
<div class="line"> </div>
<div class="line">&lt;group_member&gt; ::= &lt;named_datatype&gt; | &lt;group&gt; | &lt;dataset&gt; |</div>
<div class="line"> &lt;softlink&gt; | &lt;external_link&gt;</div>
<div class="line"> </div>
<div class="line">&lt;dataset&gt; ::= DATASET &lt;dataset_name&gt; { &lt;hardlink&gt; | &lt;dataset_info&gt; }</div>
<div class="line"> </div>
<div class="line">&lt;dataset_info&gt; ::= &lt;dataset_type&gt;</div>
<div class="line"> &lt;dataset_space&gt;</div>
<div class="line"> &lt;dcpl_info&gt;opt</div>
<div class="line"> &lt;dataset_attribute&gt;* &lt;object_id&gt;opt</div>
<div class="line"> &lt;data&gt;opt</div>
<div class="line">// Tokens above can be in any order as long as &lt;data&gt; is</div>
<div class="line">// after &lt;dataset_type&gt; and &lt;dataset_space&gt;.</div>
<div class="line"> </div>
<div class="line">&lt;dcpl_info&gt; ::= &lt;storagelayout&gt;</div>
<div class="line"> &lt;compression_filters&gt;</div>
<div class="line"> &lt;fillvalue&gt;</div>
<div class="line"> &lt;allocationtime&gt;</div>
<div class="line"> </div>
<div class="line">&lt;dataset_name&gt; ::= &lt;identifier&gt;</div>
<div class="line"> </div>
<div class="line">&lt;storagelayout&gt; :: = STORAGE_LAYOUT {</div>
<div class="line"> &lt;contiguous_layout&gt; | &lt;chunked_layout&gt; |</div>
<div class="line"> &lt;compact_layout&gt; | &lt;virtual_layout&gt;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;contiguous_layout&gt; ::= CONTIGUOUS</div>
<div class="line"> &lt;internal_layout&gt; | &lt;external_layout&gt;</div>
<div class="line"> </div>
<div class="line">&lt;chunked_layout&gt; ::= CHUNKED &lt;dims&gt;</div>
<div class="line"> &lt;filter_ratio&gt;opt</div>
<div class="line"> </div>
<div class="line">&lt;compact_layout&gt; ::= COMPACT</div>
<div class="line"> &lt;size&gt;</div>
<div class="line"> </div>
<div class="line">&lt;internal_layout&gt; ::= &lt;size&gt;</div>
<div class="line"> &lt;offset&gt;</div>
<div class="line"> </div>
<div class="line">&lt;external_layout&gt; ::= EXTERNAL {</div>
<div class="line"> &lt;external_file&gt;+</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;virtual_layout&gt; ::= &lt;vmaps&gt;*opt</div>
<div class="line"> </div>
<div class="line">&lt;vmaps&gt; ::= MAPPING &lt;int_value&gt; {</div>
<div class="line"> &lt;virtual_map&gt;</div>
<div class="line"> &lt;source_map&gt;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;virtual_map&gt; ::= VIRTUAL {</div>
<div class="line"> &lt;vmaps_selection&gt;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;source_map&gt; ::= SOURCE {</div>
<div class="line"> FILE &lt;file_name&gt;</div>
<div class="line"> DATASET &lt;dataset_name&gt;</div>
<div class="line"> &lt;vmaps_selection&gt;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;vmaps_selection&gt; ::= &lt;regular_hyperslab&gt; | &lt;irregular_hyperslab&gt; |</div>
<div class="line"> &lt;select_points&gt; | &lt;select_none&gt; | &lt;select_all&gt;</div>
<div class="line"> </div>
<div class="line">&lt;regular_hyperslab&gt; ::= SELECTION REGULAR_HYPERSLAB {</div>
<div class="line"> &lt;start&gt;</div>
<div class="line"> &lt;stride&gt;</div>
<div class="line"> &lt;count&gt;</div>
<div class="line"> &lt;block&gt;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;irregular_hyperslab&gt; ::= SELECTION IRREGULAR_HYPERSLAB {</div>
<div class="line"> &lt;region_info&gt;+</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;select_points&gt; ::= SELECTION POINT {</div>
<div class="line"> (&lt;coor_list&gt;)+</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;select_none&gt; ::= SELECTION NONE</div>
<div class="line"> </div>
<div class="line">&lt;select_all&gt; ::= SELECTION ALL</div>
<div class="line"> </div>
<div class="line">&lt;dims&gt; ::= (&lt;dims_values&gt;)</div>
<div class="line"> </div>
<div class="line">&lt;dims_values&gt; ::= &lt;int_value&gt; | &lt;int_value&gt;, &lt;dims_values&gt;</div>
<div class="line"> </div>
<div class="line">&lt;external_file&gt; ::= FILENAME &lt;file_name&gt; &lt;size&gt; &lt;offset&gt;</div>
<div class="line"> </div>
<div class="line">&lt;offset&gt; ::= OFFSET &lt;int_value&gt;</div>
<div class="line"> </div>
<div class="line">&lt;size&gt; ::= SIZE &lt;int_value&gt;</div>
<div class="line"> </div>
<div class="line">&lt;filter_ratio&gt; ::= &lt;size&gt; | &lt;compressionratio&gt;</div>
<div class="line"> </div>
<div class="line">&lt;compressionratio&gt; :: = &lt;size&gt; (&lt;float_data&gt;:1 COMPRESSION)</div>
<div class="line"> </div>
<div class="line">&lt;compression_filters&gt; :: = FILTERS {</div>
<div class="line"> &lt;filter_type&gt;+ | NONE</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;filter_type&gt; :: = &lt;filter_deflate&gt; | &lt;filter_shuffle&gt; |</div>
<div class="line"> &lt;filter_flecther&gt; | &lt;filter_szip&gt; |</div>
<div class="line"> &lt;filter_nbit&gt; | &lt;filter_scaleoffset&gt; |</div>
<div class="line"> &lt;filter_default&gt;</div>
<div class="line"> </div>
<div class="line">&lt;filter_default&gt; :: = &lt;filter_user&gt; {</div>
<div class="line"> FILTER_ID &lt;int_value&gt;</div>
<div class="line"> &lt;filter_comment&gt;opt</div>
<div class="line"> &lt;filter_params&gt;opt</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;filter_user&gt; :: = USER_DEFINED_FILTER</div>
<div class="line"> </div>
<div class="line">&lt;filter_deflate&gt; :: = COMPRESSION DEFLATE { LEVEL &lt;int_value&gt; }</div>
<div class="line"> </div>
<div class="line">&lt;filter_shuffle&gt; :: = PREPROCESSING SHUFFLE</div>
<div class="line"> </div>
<div class="line">&lt;filter_flecther&gt; :: = CHECKSUM FLETCHER32</div>
<div class="line"> </div>
<div class="line">&lt;filter_szip&gt; :: = COMPRESSION SZIP {</div>
<div class="line"> PIXELS_PER_BLOCK &lt;int_value&gt;</div>
<div class="line"> &lt;filter_szip_mode&gt;opt</div>
<div class="line"> &lt;filter_szip_coding&gt;opt</div>
<div class="line"> &lt;filter_szip_order&gt;opt</div>
<div class="line"> &lt;filter_szip_header&gt;opt</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;filter_szip_mode&gt; :: = MODE HARDWARE | K13</div>
<div class="line"> </div>
<div class="line">&lt;filter_szip_coding&gt; :: = CODING ENTROPY | NEAREST NEIGHBOUR</div>
<div class="line"> </div>
<div class="line">&lt;filter_szip_order&gt; :: = BYTE_ORDER LSB | MSB</div>
<div class="line"> </div>
<div class="line">&lt;filter_szip_header&gt; :: = HEADER RAW</div>
<div class="line"> </div>
<div class="line">&lt;filter_nbit&gt; :: = CHECKSUM NBIT</div>
<div class="line"> </div>
<div class="line">&lt;filter_scaleoffset&gt; :: = COMPRESSION SCALEOFFSET { MIN BITS &lt;int_value&gt; }</div>
<div class="line"> </div>
<div class="line">&lt;filter_comment&gt; :: = COMMENT &lt;identifier&gt;</div>
<div class="line"> </div>
<div class="line">&lt;filter_params&gt; :: = PARAMS { &lt;int_value&gt;* }</div>
<div class="line"> </div>
<div class="line">&lt;fillvalue&gt; ::= FILLVALUE {</div>
<div class="line"> FILL_TIME H5D_FILL_TIME_ALLOC | H5D_FILL_TIME_NEVER | H5D_FILL_TIME_IFSET</div>
<div class="line"> VALUE H5D_FILL_VALUE_UNDEFINED | H5D_FILL_VALUE_DEFAULT | &lt;any_element&gt;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;allocationtime&gt; ::= ALLOCATION_TIME {</div>
<div class="line"> H5D_ALLOC_TIME_EARLY | H5D_ALLOC_TIME_INCR |</div>
<div class="line"> H5D_ALLOC_TIME_LATE</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;dataset_attribute&gt; ::= &lt;attribute&gt;</div>
<div class="line"> </div>
<div class="line">&lt;softlink&gt; ::= SOFTLINK &lt;softlink_name&gt; {</div>
<div class="line"> LINKTARGET &lt;target&gt;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;softlink_name&gt; ::= &lt;identifier&gt;</div>
<div class="line"> </div>
<div class="line">&lt;target&gt; ::= &lt;identifier&gt;</div>
<div class="line"> </div>
<div class="line">&lt;external_link&gt; ::= EXTERNAL_LINK &lt;external_link_name&gt; {</div>
<div class="line"> TARGETFILE &lt;targetfile&gt;</div>
<div class="line"> TARGETPATH &lt;targetpath&gt; &lt;targetobj&gt;opt</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;external_link_name&gt; ::= &lt;identifier&gt;</div>
<div class="line"> </div>
<div class="line">&lt;user_defined_link&gt; ::= USERDEFINED_LINK &lt;external_link_name&gt; {</div>
<div class="line"> LINKCLASS &lt;user_link_type&gt;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line">&lt;user_link_type&gt; ::= &lt;int_value&gt;</div>
<div class="line"> </div>
<div class="line">&lt;targetfile&gt; ::= &lt;file_name&gt;</div>
<div class="line"> </div>
<div class="line">&lt;targetpath&gt; ::= &lt;identifier&gt;</div>
<div class="line"> </div>
<div class="line">&lt;targetobj&gt; ::= &lt;named_datatype&gt; | &lt;group&gt; | &lt;dataset&gt;</div>
<div class="line"> </div>
<div class="line">&lt;identifier&gt; ::= &quot;a string&quot;</div>
<div class="line">// character &#39;/&#39; should be used with care.</div>
<div class="line"> </div>
<div class="line">&lt;pos_list&gt; ::= &lt;pos_int&gt;, &lt;pos_list&gt; | &lt;pos_int&gt;</div>
<div class="line"> </div>
<div class="line">&lt;int_value&gt; ::= 0 | &lt;pos_int&gt;</div>
<div class="line"> </div>
<div class="line">&lt;pos_int&gt; ::= [1-9][0-9]*</div>
<div class="line"> </div>
<div class="line">&lt;hex_value&gt; ::= 0x[0-F][0-F]+ | [0-F][0-F]+</div>
</div><!-- fragment --><h1 class="doxsection"><a class="anchor" id="example114"></a>
An Example of an HDF5 File in DDL</h1>
<div class="fragment"><div class="line">HDF5 &quot;example.h5&quot; {</div>
<div class="line">GROUP &quot;/&quot; {</div>
<div class="line"> ATTRIBUTE &quot;attr1&quot; {</div>
<div class="line"> DATATYPE H5T_STRING {</div>
<div class="line"> STRSIZE 17;</div>
<div class="line"> STRPAD H5T_STR_NULLTERM;</div>
<div class="line"> CSET H5T_CSET_ASCII;</div>
<div class="line"> CTYPE H5T_C_S1;</div>
<div class="line"> }</div>
<div class="line"> DATASPACE SCALAR</div>
<div class="line"> DATA {</div>
<div class="line"> &quot;string attribute&quot;</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> DATASET &quot;dset1&quot; {</div>
<div class="line"> DATATYPE H5T_STD_I32BE</div>
<div class="line"> DATASPACE SIMPLE { ( 10, 10 ) / ( 10, 10 ) }</div>
<div class="line"> DATA {</div>
<div class="line"> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,</div>
<div class="line"> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,</div>
<div class="line"> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,</div>
<div class="line"> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,</div>
<div class="line"> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,</div>
<div class="line"> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,</div>
<div class="line"> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,</div>
<div class="line"> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,</div>
<div class="line"> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,</div>
<div class="line"> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> DATASET &quot;dset2&quot; {</div>
<div class="line"> DATATYPE H5T_COMPOUND {</div>
<div class="line"> H5T_STD_I32BE &quot;a&quot;;</div>
<div class="line"> H5T_IEEE_F32BE &quot;b&quot;;</div>
<div class="line"> H5T_IEEE_F64BE &quot;c&quot;;</div>
<div class="line"> }</div>
<div class="line"> DATASPACE SIMPLE { ( 5 ) / ( 5 ) }</div>
<div class="line"> DATA {</div>
<div class="line"> {</div>
<div class="line"> 1,</div>
<div class="line"> 0.1,</div>
<div class="line"> 0.01</div>
<div class="line"> },</div>
<div class="line"> {</div>
<div class="line"> 2,</div>
<div class="line"> 0.2,</div>
<div class="line"> 0.02</div>
<div class="line"> },</div>
<div class="line"> {</div>
<div class="line"> 3,</div>
<div class="line"> 0.3,</div>
<div class="line"> 0.03</div>
<div class="line"> },</div>
<div class="line"> {</div>
<div class="line"> 4,</div>
<div class="line"> 0.4,</div>
<div class="line"> 0.04</div>
<div class="line"> },</div>
<div class="line"> {</div>
<div class="line"> 5,</div>
<div class="line"> 0.5,</div>
<div class="line"> 0.05</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> GROUP &quot;group1&quot; {</div>
<div class="line"> COMMENT &quot;This is a comment for group1&quot;;</div>
<div class="line"> DATASET &quot;dset3&quot; {</div>
<div class="line"> DATATYPE &quot;/type1&quot;</div>
<div class="line"> DATASPACE SIMPLE { ( 5 ) / ( 5 ) }</div>
<div class="line"> DATA {</div>
<div class="line"> {</div>
<div class="line"> [ 0, 1, 2, 3 ],</div>
<div class="line"> [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,</div>
<div class="line"> 0.2, 0.2, 0.2, 0.2, 0.2, 0.2,</div>
<div class="line"> 0.3, 0.3, 0.3, 0.3, 0.3, 0.3,</div>
<div class="line"> 0.4, 0.4, 0.4, 0.4, 0.4, 0.4,</div>
<div class="line"> 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ]</div>
<div class="line"> },</div>
<div class="line"> {</div>
<div class="line"> [ 0, 1, 2, 3 ],</div>
<div class="line"> [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,</div>
<div class="line"> 0.2, 0.2, 0.2, 0.2, 0.2, 0.2,</div>
<div class="line"> 0.3, 0.3, 0.3, 0.3, 0.3, 0.3,</div>
<div class="line"> 0.4, 0.4, 0.4, 0.4, 0.4, 0.4,</div>
<div class="line"> 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ]</div>
<div class="line"> },</div>
<div class="line"> {</div>
<div class="line"> [ 0, 1, 2, 3 ],</div>
<div class="line"> [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,</div>
<div class="line"> 0.2, 0.2, 0.2, 0.2, 0.2, 0.2,</div>
<div class="line"> 0.3, 0.3, 0.3, 0.3, 0.3, 0.3,</div>
<div class="line"> 0.4, 0.4, 0.4, 0.4, 0.4, 0.4,</div>
<div class="line"> 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ]</div>
<div class="line"> },</div>
<div class="line"> {</div>
<div class="line"> [ 0, 1, 2, 3 ],</div>
<div class="line"> [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,</div>
<div class="line"> 0.2, 0.2, 0.2, 0.2, 0.2, 0.2,</div>
<div class="line"> 0.3, 0.3, 0.3, 0.3, 0.3, 0.3,</div>
<div class="line"> 0.4, 0.4, 0.4, 0.4, 0.4, 0.4,</div>
<div class="line"> 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ]</div>
<div class="line"> },</div>
<div class="line"> {</div>
<div class="line"> [ 0, 1, 2, 3 ],</div>
<div class="line"> [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,</div>
<div class="line"> 0.2, 0.2, 0.2, 0.2, 0.2, 0.2,</div>
<div class="line"> 0.3, 0.3, 0.3, 0.3, 0.3, 0.3,</div>
<div class="line"> 0.4, 0.4, 0.4, 0.4, 0.4, 0.4,</div>
<div class="line"> 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ]</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> DATASET &quot;dset3&quot; {</div>
<div class="line"> DATATYPE H5T_VLEN { H5T_STD_I32LE }</div>
<div class="line"> DATASPACE SIMPLE { ( 4 ) / ( 4 ) }</div>
<div class="line"> DATA {</div>
<div class="line"> (0), (10, 11), (20, 21, 22), (30, 31, 32, 33)</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> GROUP &quot;group2&quot; {</div>
<div class="line"> HARDLINK &quot;/group1&quot;</div>
<div class="line"> }</div>
<div class="line"> SOFTLINK &quot;slink1&quot; {</div>
<div class="line"> LINKTARGET &quot;somevalue&quot;</div>
<div class="line"> }</div>
<div class="line"> DATATYPE &quot;type1&quot; H5T_COMPOUND {</div>
<div class="line"> H5T_ARRAY { [4] H5T_STD_I32BE } &quot;a&quot;;</div>
<div class="line"> H5T_ARRAY { [5][6] H5T_IEEE_F32BE } &quot;b&quot;;</div>
<div class="line"> }</div>
<div class="line">}</div>
<div class="line">}</div>
</div><!-- fragment --><hr />
<p> Navigate back: <a class="el" href="index.html" title="notitle">Main</a> / <a class="el" href="_s_p_e_c.html" title="Specifications">Specifications</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>