From eed6800521ab6f21c41f485820ec1ee2def42e94 Mon Sep 17 00:00:00 2001 From: dimitri Date: Sun, 12 Aug 2001 16:26:14 +0000 Subject: Release-1.2.9-20010812 --- INSTALL | 4 +- README | 4 +- VERSION | 2 +- addon/xmlparse/Doxyfile | 6 +- addon/xmlparse/basehandler.h | 2 +- addon/xmlparse/compoundhandler.cpp | 4 + addon/xmlparse/dochandler.cpp | 76 +++++++++++- addon/xmlparse/dochandler.h | 42 ++++++- addon/xmlparse/main.cpp | 19 +-- addon/xmlparse/memberhandler.cpp | 4 + doc/commands.doc | 10 ++ doc/config.doc | 7 ++ doc/index.doc | 4 +- doc/preprocessing.doc | 67 ++++++++--- packages/rpm/doxygen.spec | 2 +- qtools/qtools.pro.in | 2 +- src/classdef.cpp | 123 ++++++++++++++++---- src/classdef.h | 27 ++--- src/config.l | 7 ++ src/definition.cpp | 6 +- src/definition.h | 2 +- src/doc.l | 6 +- src/dot.cpp | 232 ++++++++----------------------------- src/dot.h | 4 +- src/doxygen.cpp | 161 +++++++++++++++---------- src/entry.h | 3 +- src/htmlgen.cpp | 4 +- src/htmlgen.h | 7 +- src/index.cpp | 18 +-- src/latexgen.h | 3 +- src/mangen.h | 2 +- src/memberdef.cpp | 52 +++++++-- src/memberdef.h | 2 +- src/outputgen.h | 3 +- src/outputlist.cpp | 1 + src/outputlist.h | 5 +- src/rtfgen.h | 2 +- src/scanner.l | 33 ++++-- src/util.cpp | 9 +- src/util.h | 4 +- src/xmlgen.cpp | 13 ++- tmake/lib/unix/generic.t | 2 +- 42 files changed, 592 insertions(+), 394 deletions(-) diff --git a/INSTALL b/INSTALL index e0809c2..d46236f 100644 --- a/INSTALL +++ b/INSTALL @@ -1,6 +1,6 @@ -DOXYGEN Version 1.2.9.1 +DOXYGEN Version 1.2.9-20010812 Please read the installation section of the manual for instructions. -------- -Dimitri van Heesch (05 August 2001) +Dimitri van Heesch (12 August 2001) diff --git a/README b/README index f6bbb72..03ddee8 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -DOXYGEN Version 1.2.9.1 +DOXYGEN Version 1.2.9_20010812 Please read INSTALL for compilation instructions. @@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. Enjoy, -Dimitri van Heesch (dimitri@stack.nl) (05 August 2001) +Dimitri van Heesch (dimitri@stack.nl) (12 August 2001) diff --git a/VERSION b/VERSION index 140a505..cdb4ff7 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.2.9.1 +1.2.9-20010812 diff --git a/addon/xmlparse/Doxyfile b/addon/xmlparse/Doxyfile index bec9537..7899f6b 100644 --- a/addon/xmlparse/Doxyfile +++ b/addon/xmlparse/Doxyfile @@ -3,7 +3,7 @@ #--------------------------------------------------------------------------- # General configuration options #--------------------------------------------------------------------------- -PROJECT_NAME = dox2html +PROJECT_NAME = xmlparse PROJECT_NUMBER = OUTPUT_DIRECTORY = doc OUTPUT_LANGUAGE = English @@ -145,8 +145,8 @@ INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES GRAPHICAL_HIERARCHY = YES DOT_PATH = -MAX_DOT_GRAPH_WIDTH = 3024 -MAX_DOT_GRAPH_HEIGHT = 3024 +MAX_DOT_GRAPH_WIDTH = 1280 +MAX_DOT_GRAPH_HEIGHT = 1024 GENERATE_LEGEND = YES DOT_CLEANUP = YES #--------------------------------------------------------------------------- diff --git a/addon/xmlparse/basehandler.h b/addon/xmlparse/basehandler.h index 0bf7c68..6129aa4 100644 --- a/addon/xmlparse/basehandler.h +++ b/addon/xmlparse/basehandler.h @@ -115,7 +115,7 @@ template class BaseHandler : public IBaseHandler, virtual ~BaseHandler() { - delete m_fallBackHandler; + ASSERT(m_delegateHandler==0); } virtual bool startDocument() diff --git a/addon/xmlparse/compoundhandler.cpp b/addon/xmlparse/compoundhandler.cpp index c299397..dd81a2a 100644 --- a/addon/xmlparse/compoundhandler.cpp +++ b/addon/xmlparse/compoundhandler.cpp @@ -21,6 +21,8 @@ CompoundHandler::CompoundHandler(IBaseHandler *parent) : m_parent(parent), m_brief(0), m_detailed(0) { m_superClasses.setAutoDelete(TRUE); + m_subClasses.setAutoDelete(TRUE); + m_sections.setAutoDelete(TRUE); addEndHandler("compounddef",this,&CompoundHandler::endCompound); @@ -42,6 +44,8 @@ CompoundHandler::CompoundHandler(IBaseHandler *parent) CompoundHandler::~CompoundHandler() { + delete m_brief; + delete m_detailed; } void CompoundHandler::startSection(const QXmlAttributes& attrib) diff --git a/addon/xmlparse/dochandler.cpp b/addon/xmlparse/dochandler.cpp index 4e91d8f..7a72763 100644 --- a/addon/xmlparse/dochandler.cpp +++ b/addon/xmlparse/dochandler.cpp @@ -163,6 +163,8 @@ void MarkupHandler::endSuperscript() ListItemHandler::ListItemHandler(IBaseHandler *parent) : DocNode(ListItem), m_parent(parent) { + m_children.setAutoDelete(TRUE); + addEndHandler("listitem",this,&ListItemHandler::endListItem); addStartHandler("para",this,&ListItemHandler::startParagraph); @@ -236,6 +238,48 @@ void ListHandler::startListItem(const QXmlAttributes& attrib) // ParameterHandler //---------------------------------------------------------------------- +ParameterHandler::ParameterHandler(IBaseHandler *parent) : DocNode(Parameter), + m_parent(parent), m_description(0) +{ + addEndHandler("parametername",this,&ParameterHandler::endParameterName); + addEndHandler("parameterdescription",this,&ParameterHandler::endParameterDescription); + addStartHandler("para",this,&ParameterHandler::startParagraph); +} + +ParameterHandler::~ParameterHandler() +{ + delete m_description; +} + +void ParameterHandler::startParameterName(const QXmlAttributes& /*attrib*/) +{ + m_parent->setDelegate(this); +} + +void ParameterHandler::endParameterName() +{ + m_name = m_curString; + printf("parameter %s\n",m_name.data()); + m_curString=""; + m_parent->setDelegate(0); +} + +void ParameterHandler::startParameterDescription(const QXmlAttributes& /*attrib*/) +{ + m_parent->setDelegate(this); +} + +void ParameterHandler::endParameterDescription() +{ + m_parent->setDelegate(0); +} + +void ParameterHandler::startParagraph(const QXmlAttributes& attrib) +{ + ASSERT(m_description==0); + m_description = new ParagraphHandler(this); + m_description->startParagraph(attrib); +} //---------------------------------------------------------------------- // ParameterListHandler @@ -245,6 +289,10 @@ ParameterListHandler::ParameterListHandler(IBaseHandler *parent) : DocNode(ParameterList), m_parent(parent) { addEndHandler("parameterlist",this,&ParameterListHandler::endParameterList); + addStartHandler("parametername",this,&ParameterListHandler::startParameterName); + addStartHandler("parameterdescription",this,&ParameterListHandler::startParameterDescription); + addStartHandler("title"); + addEndHandler("title"); m_parameters.setAutoDelete(TRUE); m_curParam=0; } @@ -253,8 +301,17 @@ ParameterListHandler::~ParameterListHandler() { } -void ParameterListHandler::startParameterList(const QXmlAttributes& /*attrib*/) +void ParameterListHandler::startParameterList(const QXmlAttributes& attrib) { + QString kind = attrib.value("kind"); + if (kind=="retval") m_type=RetVal; + else if (kind=="exception") m_type=Exception; + else if (kind=="param") m_type=Param; + else + { + printf("Error: invalid parameterlist type: %s\n",kind.data()); + } + printf("parameterlist kind=%s\n",kind.data()); m_parent->setDelegate(this); } @@ -263,6 +320,19 @@ void ParameterListHandler::endParameterList() m_parent->setDelegate(0); } +void ParameterListHandler::startParameterName(const QXmlAttributes& attrib) +{ + m_curParam = new ParameterHandler(this); + m_parameters.append(m_curParam); + m_curParam->startParameterName(attrib); +} + +void ParameterListHandler::startParameterDescription(const QXmlAttributes& attrib) +{ + ASSERT(m_curParam!=0); + m_curParam->startParameterDescription(attrib); +} + //---------------------------------------------------------------------- // ParagraphHandler //---------------------------------------------------------------------- @@ -279,10 +349,12 @@ ParagraphHandler::ParagraphHandler(IBaseHandler *parent) addStartHandler("itemizedlist",this,&ParagraphHandler::startItemizedList); addStartHandler("orderedlist",this,&ParagraphHandler::startOrderedList); + addStartHandler("parameterlist",this,&ParagraphHandler::startParameterList); } ParagraphHandler::~ParagraphHandler() { + delete m_markupHandler; } void ParagraphHandler::startParagraph(const QXmlAttributes& /*attrib*/) @@ -339,6 +411,8 @@ void ParagraphHandler::addTextNode() DocHandler::DocHandler(IBaseHandler *parent) : m_parent(parent) { + m_children.setAutoDelete(TRUE); + addEndHandler("briefdescription",this,&DocHandler::endDoc); addEndHandler("detaileddescription",this,&DocHandler::endDoc); diff --git a/addon/xmlparse/dochandler.h b/addon/xmlparse/dochandler.h index 376d6f8..0b11e25 100644 --- a/addon/xmlparse/dochandler.h +++ b/addon/xmlparse/dochandler.h @@ -51,7 +51,8 @@ class DocNode ItemizedList, OrderedList, ListItem, - ParameterList + ParameterList, + Parameter }; DocNode(NodeKind k) : m_kind(k) {} virtual ~DocNode() {} @@ -182,8 +183,11 @@ class ParameterHandler : public DocNode, public: ParameterHandler(IBaseHandler *parent); virtual ~ParameterHandler(); - virtual void startParameterList(const QXmlAttributes& attrib); - virtual void endParameterList(); + virtual void startParameterName(const QXmlAttributes& attrib); + virtual void endParameterName(); + virtual void startParameterDescription(const QXmlAttributes& attrib); + virtual void endParameterDescription(); + virtual void startParagraph(const QXmlAttributes& attrib); private: IBaseHandler *m_parent; @@ -201,15 +205,45 @@ class ParameterListHandler : public DocNode, public BaseHandler { public: + enum Types { Param, RetVal, Exception }; ParameterListHandler(IBaseHandler *parent); virtual ~ParameterListHandler(); virtual void startParameterList(const QXmlAttributes& attrib); virtual void endParameterList(); + virtual void startParameterName(const QXmlAttributes& attrib); + virtual void startParameterDescription(const QXmlAttributes& attrib); private: IBaseHandler *m_parent; QList m_parameters; ParameterHandler *m_curParam; + Types m_type; +}; + +//----------------------------------------------------------------------------- + +/* \brief Node representing a simple section with an unnumbered header. + * + */ +class SimpleSectHandler : public DocNode, + public BaseHandler +{ + public: + enum Types { See, Return, Author, Version, + Since, Date, Bug, Note, + Warning, Par, Deprecated, Pre, + Post, Invar, Remark, Attention + }; + SimpleSectHandler(IBaseHandler *parent); + virtual ~SimpleSectHandler(); + virtual void startSimpleSect(const QXmlAttributes& attrib); + virtual void endSimpleSect(); + + private: + IBaseHandler *m_parent; + ParameterHandler *m_curParam; + Types m_type; + QString m_title; }; //----------------------------------------------------------------------------- @@ -252,7 +286,7 @@ class DocHandler : public BaseHandler virtual ~DocHandler(); private: IBaseHandler *m_parent; - QList m_children; + QList m_children; }; #endif diff --git a/addon/xmlparse/main.cpp b/addon/xmlparse/main.cpp index 60f4142..7fdb60a 100644 --- a/addon/xmlparse/main.cpp +++ b/addon/xmlparse/main.cpp @@ -55,14 +55,17 @@ int main(int argc,char **argv) exit(1); } - QFile xmlFile(argv[1]); - MainHandler handler; - ErrorHandler errorHandler; - QXmlInputSource source( xmlFile ); - QXmlSimpleReader reader; - reader.setContentHandler( &handler ); - reader.setErrorHandler( &errorHandler ); - reader.parse( source ); + //for (;;) + //{ + QFile xmlFile(argv[1]); + MainHandler handler; + ErrorHandler errorHandler; + QXmlInputSource source( xmlFile ); + QXmlSimpleReader reader; + reader.setContentHandler( &handler ); + reader.setErrorHandler( &errorHandler ); + reader.parse( source ); + //} return 0; } diff --git a/addon/xmlparse/memberhandler.cpp b/addon/xmlparse/memberhandler.cpp index 4cbe4a6..3198676 100644 --- a/addon/xmlparse/memberhandler.cpp +++ b/addon/xmlparse/memberhandler.cpp @@ -33,11 +33,15 @@ MemberHandler::MemberHandler(IBaseHandler *parent) addStartHandler("briefdescription",this,&MemberHandler::startBriefDesc); addStartHandler("detaileddescription",this,&MemberHandler::startDetailedDesc); + + m_params.setAutoDelete(TRUE); } MemberHandler::~MemberHandler() { + delete m_brief; + delete m_detailed; } void MemberHandler::startMember(const QXmlAttributes& attrib) diff --git a/doc/commands.doc b/doc/commands.doc index cd2a634..d9cf37f 100644 --- a/doc/commands.doc +++ b/doc/commands.doc @@ -101,6 +101,7 @@ documentation:
  • \refitem cmdnote \note
  • \refitem cmdoverload \overload
  • \refitem cmdp \p +
  • \refitem cmdpackage \package
  • \refitem cmdpage \page
  • \refitem cmdpar \par
  • \refitem cmdparam \param @@ -406,6 +407,8 @@ doxygen. Unrecognized commands are treated as normal text. */ \endverbatim + You can refer to the main page using \\ref index. + \sa section \ref cmdsection "\\section", section \ref cmdsubsection "\\subsection" and section \ref cmdpage "\\page". @@ -468,6 +471,13 @@ Public/Protected/Private/... section. \endhtmlonly
    +\subsection cmdpackage \package + + \addindex \package + Indicates that a comment block contains documentation for a + Java package with name \. + +
    \subsection cmdpage \page (title) \addindex \page diff --git a/doc/config.doc b/doc/config.doc index e4f021d..4d5b92f 100644 --- a/doc/config.doc +++ b/doc/config.doc @@ -171,6 +171,7 @@ followed by the descriptions of the tags grouped by category.
  • \refitem cfg_strip_from_path STRIP_FROM_PATH
  • \refitem cfg_tab_size TAB_SIZE
  • \refitem cfg_tagfiles TAGFILES +
  • \refitem cfg_template_relations TEMPLATE_RELATIONS
  • \refitem cfg_toc_expand TOC_EXPAND
  • \refitem cfg_treeview_width TREEVIEW_WIDTH
  • \refitem cfg_verbatim_headers VERBATIM_HEADERS @@ -1149,6 +1150,12 @@ TAGFILES = file1=loc1 "file2 = loc2" ... indirect implementation dependencies (inheritance, containment, and class references variables) of the class with other documented classes. +\anchor cfg_template_relations +
    \c TEMPLATE_RELATIONS
    + \addindex TEMPLATE_RELATIONS + If the \c TEMPLATE_RELATIONS and \c HAVE_DOT tags are set to \c YES then + doxygen will show the relations between templates and their instances. + \anchor cfg_include_graph
    \c INCLUDE_GRAPH
    \addindex INCLUDE_GRAPH diff --git a/doc/index.doc b/doc/index.doc index 99e6d7c..9c030cb 100644 --- a/doc/index.doc +++ b/doc/index.doc @@ -173,8 +173,10 @@ Thanks go to: Boris Bralo, Nickolay Semyonov, Richard Kim, Földvári György, Grzegorz Kowal, and Wang Weihan for providing translations into various languages. +
  • Erik Jan Lingen of Habanera for + donating money.
  • The Comms group of Symbian for donating - me an ultra cool Revo plus organizer!
  • The band Porcupine Tree for providing hours of great music to listen to while coding. diff --git a/doc/preprocessing.doc b/doc/preprocessing.doc index 19f730d..524f7c5 100644 --- a/doc/preprocessing.doc +++ b/doc/preprocessing.doc @@ -152,26 +152,57 @@ for class QList is to define: PREDEFINED = QListT:=QList \endverbatim -Here is example provided by Valter Minute that helps doxygen to -wade through the boilerplate code in Microsoft's ATL library: +Here is an example provided by Valter Minute & Reyes Ponce that helps +doxygen to wade through the boilerplate code in Microsoft's ATL & MFC +libraries: \verbatim -PREDEFINED = DECLARE_REGISTRY_RESOURCEID=// \ - DECLARE_PROTECT_FINAL_CONSTRUCT=// \ - BEGIN_COM_MAP=/* \ - END_COM_MAP=*/// \ - BEGIN_PROP_MAP=/* \ - END_PROP_MAP=*/// \ - BEGIN_MSG_MAP=/* \ - END_MSG_MAP=*/// \ - DECLARE_VIEW_STATUS=// \ - "STDMETHOD(a)=HRESULT a" \ - "ATL_NO_VTABLE= "\ - "__declspec(a)= "\ - BEGIN_CONNECTION_POINT_MAP=/* \ - END_CONNECTION_POINT_MAP=*/// \ - "DECLARE_AGGREGATABLE(Class)= " \ - "DECLARE_REGISTRY_RESOURCEID(id)= " +PREDEFINED = "DECLARE_INTERFACE(name)=class name" \ + "STDMETHOD(result,name)=virtual result name" \ + "PURE= = 0" \ + THIS_= \ + THIS= \ + DECLARE_REGISTRY_RESOURCEID=// \ + DECLARE_PROTECT_FINAL_CONSTRUCT=// \ + "DECLARE_AGGREGATABLE(Class)= " \ + "DECLARE_REGISTRY_RESOURCEID(Id)= " \ + DECLARE_MESSAGE_MAP = \ + BEGIN_MESSAGE_MAP=/* \ + END_MESSAGE_MAP=*/// \ + BEGIN_COM_MAP=/* \ + END_COM_MAP=*/// \ + BEGIN_PROP_MAP=/* \ + END_PROP_MAP=*/// \ + BEGIN_MSG_MAP=/* \ + END_MSG_MAP=*/// \ + BEGIN_PROPERTY_MAP=/* \ + END_PROPERTY_MAP=*/// \ + BEGIN_OBJECT_MAP=/* \ + END_OBJECT_MAP()=*/// \ + DECLARE_VIEW_STATUS=// \ + "STDMETHOD(a)=HRESULT a" \ + "ATL_NO_VTABLE= " \ + "__declspec(a)= " \ + BEGIN_CONNECTION_POINT_MAP=/* \ + END_CONNECTION_POINT_MAP=*/// \ + "DECLARE_DYNAMIC(class)= " \ + "IMPLEMENT_DYNAMIC(class1, class2)= " \ + "DECLARE_DYNCREATE(class)= " \ + "IMPLEMENT_DYNCREATE(class1, class2)= " \ + "IMPLEMENT_SERIAL(class1, class2, class3)= " \ + "DECLARE_MESSAGE_MAP()= " \ + TRY=try \ + "CATCH_ALL(e)= catch(...)" \ + END_CATCH_ALL= \ + "THROW_LAST()= throw"\ + "RUNTIME_CLASS(class)=class" \ + "MAKEINTRESOURCE(nId)=nId" \ + "IMPLEMENT_REGISTER(v, w, x, y, z)= " \ + "ASSERT(x)=assert(x)" \ + "ASSERT_VALID(x)=assert(x)" \ + "TRACE0(x)=printf(x)" \ + "OS_ERR(A,B)={ #A, B }" \ + __cplusplus \endverbatim As you can see doxygen's preprocessor is quite powerful, but if you want diff --git a/packages/rpm/doxygen.spec b/packages/rpm/doxygen.spec index c802b39..f1ab84e 100644 --- a/packages/rpm/doxygen.spec +++ b/packages/rpm/doxygen.spec @@ -1,5 +1,5 @@ Name: doxygen -Version: 1.2.9.1 +Version: 1.2.9_20010812 Summary: documentation system for C, C++ and IDL Release: 4 Source: doxygen-%{version}.src.tar.gz diff --git a/qtools/qtools.pro.in b/qtools/qtools.pro.in index f74d7db..57fc1ab 100644 --- a/qtools/qtools.pro.in +++ b/qtools/qtools.pro.in @@ -72,7 +72,7 @@ win32:SOURCES += qfile_win32.cpp \ qfileinfo_win32.cpp INCLUDEPATH = . -TMAKE_CXXFLAGS = -DQT_NO_CODECS -DQT_LITE_UNICODE +TMAKE_CXXFLAGS += -DQT_NO_CODECS -DQT_LITE_UNICODE win32:TMAKE_CXXFLAGS += -DQT_NODLL OBJECTS_DIR = ../objects DESTDIR = ../lib diff --git a/src/classdef.cpp b/src/classdef.cpp index c0feb10..5f93e7a 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -98,7 +98,7 @@ ClassDef::ClassDef( // m_scopelessName=name().right(name().length()-i-2); //} m_subGrouping=TRUE; - m_isTemplBaseClass=-1; + //m_isTemplBaseClass=-1; m_templateInstances = 0; m_templateMaster =0; m_templBaseClassNames = 0; @@ -1408,13 +1408,34 @@ void ClassDef::setTemplateArguments(ArgumentList *al) } } - +/*! Returns \c TRUE iff this class or a class inheriting from this class + * is \e not defined in an external tag file. + */ bool ClassDef::hasNonReferenceSuperClass() { - bool found=!isReference(); + bool found=!isReference(); + if (found) return TRUE; // we're done if this class is not a reference BaseClassListIterator bcli(*m_inheritedBy); - for ( ; bcli.current() && !found ; ++bcli ) - found=found || bcli.current()->classDef->hasNonReferenceSuperClass(); + for ( ; bcli.current() && !found ; ++bcli ) // for each super class + { + ClassDef *bcd=bcli.current()->classDef; + // recurse into the super class branch + found = found || bcd->hasNonReferenceSuperClass(); + if (!found) + { + // look for template instances that might have non-reference super classes + QDict *cil = bcd->getTemplateInstances(); + if (cil) + { + QDictIterator tidi(*cil); + for ( ; tidi.current() && !found ; ++tidi) // for each template instance + { + // recurse into the template instance branch + found = found || tidi.current()->hasNonReferenceSuperClass(); + } + } + } + } return found; } @@ -1512,28 +1533,50 @@ void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup) /*! a link to this class is possible within this project */ bool ClassDef::isLinkableInProject() const { - return !name().isEmpty() && /* no name */ - m_isTemplBaseClass==-1 && /* template base class */ - name().find('@')==-1 && /* anonymous compound */ - (m_prot!=Private || Config_getBool("EXTRACT_PRIVATE")) && /* private */ - hasDocumentation() && /* documented */ - !isReference(); /* not an external reference */ + if (m_templateMaster) + { + return m_templateMaster->isLinkableInProject(); + } + else + { + return !name().isEmpty() && /* no name */ + //m_isTemplBaseClass==-1 && /* template base class */ + name().find('@')==-1 && /* anonymous compound */ + (m_prot!=Private || Config_getBool("EXTRACT_PRIVATE")) && /* private */ + hasDocumentation() && /* documented */ + !isReference(); /* not an external reference */ + } +} + +bool ClassDef::isLinkable() const +{ + if (m_templateMaster) + { + return m_templateMaster->isLinkable(); + } + else + { + return isLinkableInProject() || isReference(); + } } + /*! the class is visible in a class diagram, or class hierarchy */ bool ClassDef::isVisibleInHierarchy() -{ return // show all classes or a subclass is visible - (Config_getBool("ALLEXTERNALS") || hasNonReferenceSuperClass()) && - // and not an annonymous compound - name().find('@')==-1 && - // not an artifically introduced class - !m_artificial && - // and not an inherited template argument - //m_isTemplBaseClass==-1 && - // and not privately inherited - (m_prot!=Private || Config_getBool("EXTRACT_PRIVATE")) && - // documented or show anyway or documentation is external - (hasDocumentation() || !Config_getBool("HIDE_UNDOC_CLASSES") || isReference()); +{ + return // show all classes or a subclass is visible + (Config_getBool("ALLEXTERNALS") || hasNonReferenceSuperClass()) && + // and not an annonymous compound + name().find('@')==-1 && + // not an artifically introduced class + !m_artificial && + // and not privately inherited + (m_prot!=Private || Config_getBool("EXTRACT_PRIVATE")) && + // documented or shown anyway or documentation is external + (hasDocumentation() || + !Config_getBool("HIDE_UNDOC_CLASSES") || + isReference() + ); } bool ClassDef::hasDocumentation() const @@ -1554,6 +1597,7 @@ bool ClassDef::isBaseClass(ClassDef *bcd) for ( ; bcli.current() && !found ; ++bcli) { ClassDef *ccd=bcli.current()->classDef; + if (ccd->templateMaster()) ccd=ccd->templateMaster(); //printf("isBaseClass() baseclass %s\n",ccd->name().data()); if (ccd==bcd) found=TRUE; @@ -2212,6 +2256,18 @@ QCString ClassDef::getReference() const } } +bool ClassDef::isReference() const +{ + if (m_templateMaster) + { + return m_templateMaster->getReference(); + } + else + { + return Definition::isReference(); + } +} + void ClassDef::getTemplateParameterLists(QList &lists) const { Definition *d=getOuterScope(); @@ -2273,4 +2329,23 @@ QCString ClassDef::qualifiedNameWithTemplateParameters( return scName; } - +QCString ClassDef::className() const +{ + if (!m_className.isEmpty()) + { + return m_className; + } + else + { + ClassDef *that = (ClassDef *)this; + // m_className is a cache value, so we fake that this function is "const". + that->m_className=m_localName.copy(); + Definition *p=getOuterScope(); + while (p && p->definitionType()==TypeClass) + { + that->m_className.prepend(p->localName()+"::"); + p=p->getOuterScope(); + } + return m_className; + } +}; diff --git a/src/classdef.h b/src/classdef.h index 939cd90..51d0112 100644 --- a/src/classdef.h +++ b/src/classdef.h @@ -72,6 +72,7 @@ class ClassDef : public Definition QCString getFileBase() const; QCString getSourceFileBase() const; QCString getReference() const; + bool isReference() const; bool hasDocumentation() const; @@ -114,10 +115,7 @@ class ClassDef : public Definition /*! return TRUE iff a link to this class is possible (either within * this project, or as a cross-reference to another project). */ - bool isLinkable() const - { - return isLinkableInProject() || isReference(); - } + bool isLinkable() const; /*! the class is visible in a class diagram, or class hierarchy */ bool isVisibleInHierarchy(); @@ -153,12 +151,6 @@ class ClassDef : public Definition */ bool isBaseClass(ClassDef *bcd); - /*! Is this an artificial class that is the template argument of - * a class. If so the argument number is returned, otherwise -1 - * is returned. - */ - int isTemplateBaseClass() const { return m_isTemplBaseClass; } - /*! Returns a sorted dictionary with all template instances found for * this template class. Returns 0 if not a template or no instances. */ @@ -200,6 +192,11 @@ class ClassDef : public Definition */ bool isAbstract() const { return m_isAbstract; } + /*! returns the name of the class including outer classes, but not + * including namespaces. + */ + QCString className() const; + /* member lists by protection */ MemberList pubMembers; MemberList proMembers; @@ -262,7 +259,6 @@ class ClassDef : public Definition void setProtection(Protection p) { m_prot=p; } void setGroupDefForAllMembers(GroupDef *g,Grouping::GroupPri_t pri,const QCString &fileName,int startLine,bool hasDocs); void addInnerCompound(Definition *d); - void setIsTemplateBaseClass(int num) { m_isTemplBaseClass = num; } void addUsedClass(ClassDef *cd,const char *accessName); //void initTemplateMapping(); //void setTemplateArgumentMapping(const char *formal,const char *actual); @@ -384,13 +380,6 @@ class ClassDef : public Definition UsesClassDict *m_usesImplClassDict; UsesClassDict *m_usesIntfClassDict; - /*! Is this a class that exists because of template class that - * inherited one of it's template arguments. If so that this - * variable indicate the template argument number, otherwise - * this is -1 - */ - int m_isTemplBaseClass; - /*! Template instances that exists of this class, the key in the * dictionary is the template argument list. */ @@ -410,6 +399,8 @@ class ClassDef : public Definition /*! Is this an abstact class? */ bool m_isAbstract; + + QCString m_className; }; /*! \brief Class that contains information about a usage relation. diff --git a/src/config.l b/src/config.l index 3a887a6..cdaeb66 100644 --- a/src/config.l +++ b/src/config.l @@ -2038,6 +2038,13 @@ void Config::create() ); cb->addDependency("HAVE_DOT"); cb = addBool( + "TEMPLATE_RELATIONS", + "If set to YES, the inheritance and collaboration graphs will show the \n" + "relations between templates and their instances. \n", + TRUE + ); + cb->addDependency("HAVE_DOT"); + cb = addBool( "INCLUDE_GRAPH", "If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \n" "tags are set to YES then doxygen will generate a graph for each documented \n" diff --git a/src/definition.cpp b/src/definition.cpp index fc764f7..06d4da7 100644 --- a/src/definition.cpp +++ b/src/definition.cpp @@ -34,7 +34,11 @@ Definition::Definition(const char *df,int dl, m_defFileName = df; m_defLine = dl; m_name=name; - m_localName=stripScope(name); + if (m_name!="") + m_localName=stripScope(name); + else + m_localName=name; + //printf("m_localName=%s\n",m_localName.data()); m_brief=b; m_doc=d; m_sectionDict=0, diff --git a/src/definition.h b/src/definition.h index c4ab29a..090dcd5 100644 --- a/src/definition.h +++ b/src/definition.h @@ -80,7 +80,7 @@ class Definition virtual bool isLinkable() const = 0; virtual QCString getReference() const { return m_ref; } - bool isReference() const { return !m_ref.isEmpty(); } + virtual bool isReference() const { return !m_ref.isEmpty(); } void setReference(const char *r) { m_ref=r; } /*! Add the list of anchors that mark the sections that are found in the diff --git a/src/doc.l b/src/doc.l index 974f54b..683c219 100644 --- a/src/doc.l +++ b/src/doc.l @@ -1504,7 +1504,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) if (inBlock()) endBlock(); inParamBlock=TRUE; currentListIndent.push("D"); - outDoc->startParamList(); + outDoc->startParamList(BaseOutputDocInterface::Param); scanString(theTranslator->trParameters()+": "); outDoc->endDescTitle(); outDoc->writeDescItem(); @@ -1528,7 +1528,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) if (inBlock()) endBlock(); inRetValBlock=TRUE; currentListIndent.push("D"); - outDoc->startParamList(); + outDoc->startParamList(BaseOutputDocInterface::RetVal); scanString(theTranslator->trReturnValues()+": "); outDoc->endDescTitle(); outDoc->writeDescItem(); @@ -1552,7 +1552,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) if (inBlock()) endBlock(); inExceptionBlock=TRUE; currentListIndent.push("D"); - outDoc->startParamList(); + outDoc->startParamList(BaseOutputDocInterface::Exception); scanString(theTranslator->trExceptions()+": "); outDoc->endDescTitle(); outDoc->writeDescItem(); diff --git a/src/dot.cpp b/src/dot.cpp index 88e0571..bd13f75 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -40,7 +40,8 @@ static const char *edgeColorMap[] = "darkgreen", // Protected "firebrick4", // Private "darkorchid3", // "use" relation - "grey75" // Undocumented + "grey75", // Undocumented + "orange" // template relation }; static const char *edgeStyleMap[] = @@ -177,153 +178,6 @@ static bool isLeaf(ClassDef *cd) return TRUE; } -#if 0 -/*! Builds a mapping from formal arguments of class \a tcd to the - * actual arguments stored in templSpec. To properly initialize - * the mapping with the default template values - * ClassDef::initTemplateMapping() is called once for each class graph - * (the ClassDef::visited flag is used for this). - */ -static void setTemplateInstance(QCString templSpec,ClassDef *tcd) -{ - //printf("====== setTemplateInstance(templ=%s,class=%s)\n",templSpec.data(),tcd->name().data()); - if (!templSpec.isEmpty()) - { - //if (!tcd->visited) - //{ - // tcd->visited=TRUE; - //} - ArgumentList *tempArgList = new ArgumentList; - stringToArgumentList(templSpec,tempArgList); - ArgumentListIterator ali(*tempArgList); - Argument *arg; - uint count=0; - for (ali.toFirst();(arg=ali.current());++ali,++count) - { - ArgumentList *formalArgList = tcd->templateArguments(); - Argument *formalArg=0; - //printf("arg->type=%s count=%d formalArgList=%p\n", - // arg->type.data(),count,formalArgList); - if (formalArgList && formalArgList->count()>count && - (formalArg=formalArgList->at(count))) - { - if (formalArg->name!=arg->type) - { - tcd->setTemplateArgumentMapping(formalArg->name,arg->type); - //printf("%s->setTemplateInstantation(%s,%s)\n",tcd->name().data(), - // formalArg->name.data(),arg->type.data()); - } - } - } - delete tempArgList; - } -} - -/*! Substitutes the formal template argument list \a templSpec - * of class \a cd with the actual template arguments. - * The mapping from formal to actual template is assumed to be stored - * in \a cd using setTemplateInstance(). - */ -static QCString substituteTemplateSpec(ClassDef *cd,const QCString &templSpec) -{ - QCString result; - if (!templSpec.isEmpty()) - { - ArgumentList *tempArgList = new ArgumentList; - stringToArgumentList(templSpec,tempArgList); - ArgumentListIterator ali(*tempArgList); - Argument *arg; - bool first=TRUE; - for (ali.toFirst();(arg=ali.current());) - { - if (first) result="<",first=FALSE; - QCString actual = cd->getTemplateArgumentMapping(arg->type); - if (!actual.isEmpty()) - { - result+=actual; - } - else - { - result+=arg->type; - } - ++ali; - if (ali.current()) result+=","; else result+=">"; - } - delete tempArgList; - } - //printf("substituteTemplateSpec(%s,%s)=`%s'\n",cd->name().data(),templSpec.data(),result.data()); - return removeRedundantWhiteSpace(result); -} - -/*! Determines the actual template instance of template class \a tcd that - * relates to class \a cd. The result is stored in \a tcd. - * \param cd A class - * \param tcd A template base class - * \param templSpec Actual template parameter list to be used for tcd - * \param result resulting instance class - * \param actualArg actual template instance name of the resulting class - */ -static void computeTemplateInstance( - ClassDef *cd,ClassDef *tcd,const QCString templSpec, - ClassDef *&result,QCString &actualArg - - ) -{ - //printf("====== computeTemplateInstance(%s,base=%s,templ=%s)\n", - // cd->name().data(),tcd->name().data(),templSpec.data()); - // store the specific instance inside the class - setTemplateInstance(templSpec,tcd); - int tArgNum = tcd->isTemplateBaseClass(); - if (tArgNum!=-1) - { - //printf("tArgNum=%d\n",tArgNum); - ArgumentList *formalArgList = cd->templateArguments(); - if (formalArgList) - { - //printf("formalArgList=%p\n",formalArgList); - Argument *formalArg=formalArgList->at(tArgNum); - if (formalArg) - { - //printf("formalArg=%s\n",formalArg->name.data()); - actualArg = cd->getTemplateArgumentMapping(formalArg->name); - //printf("ActualArg=%s\n",actualArg.data()); - int pos=0; - QCString name; - QCString templSpec; - while (extractClassNameFromType(actualArg,pos,name,templSpec)) - { - Definition *scopeDef = cd->getOuterScope(); - QCString scopeName; - if (scopeDef) scopeName = scopeDef->qualifiedName(); - //printf("name=%s templSpec=%s\n",name.data(),templSpec.data()); - ClassDef *acd=0; - - // try with scope. - if (!scopeName.isEmpty()) - acd = getResolvedClass(scopeName+"::"+name); - // try without scope. - // TODO: try intermediate scopes as well! - if (acd==0) acd = getResolvedClass(name); - if (acd && !templSpec.isEmpty()) - { - // store specific template instance in the class - setTemplateInstance(templSpec,acd); - } - if (acd) - { - result = acd; - actualArg = acd->name()+templSpec; - return; - } - } - } - } - } - actualArg.resize(0); - result = 0; -} -#endif - //-------------------------------------------------------------------- class DotNodeList : public QList @@ -932,7 +786,7 @@ int DotClassGraph::m_curNodeNumber; void DotClassGraph::addClass(ClassDef *cd,DotNode *n,int prot, const char *label,int distance,const char *usedName,const char *templSpec,bool base) { - int edgeStyle = label ? EdgeInfo::Dashed : EdgeInfo::Solid; + int edgeStyle = (label || prot==EdgeInfo::Orange) ? EdgeInfo::Dashed : EdgeInfo::Solid; QCString className; if (usedName) // name is a typedef { @@ -997,34 +851,22 @@ void DotClassGraph::addClass(ClassDef *cd,DotNode *n,int prot, void DotClassGraph::buildGraph(ClassDef *cd,DotNode *n,int distance,bool base) { + // ---- Add inheritance relations + BaseClassListIterator bcli(base ? *cd->baseClasses() : *cd->subClasses()); BaseClassDef *bcd; for ( ; (bcd=bcli.current()) ; ++bcli ) { //printf("-------- inheritance relation %s->%s templ=`%s'\n", // cd->name().data(),bcd->classDef->name().data(),bcd->templSpecifiers.data()); - //QCString templSpec; - //if (base) templSpec = substituteTemplateSpec( - // cd,bcd->templSpecifiers); - //ClassDef *acd=0; - //QCString actualArg; - //computeTemplateInstance(cd,bcd->classDef,templSpec,acd,actualArg); - //printf("acd=%p actualArg=%s\n",acd,actualArg.data()); - //if (acd) - //{ - // addClass(acd,n,bcd->prot,0,distance,actualArg, - // templSpec,base); - //} - //else - //{ - // addClass(bcd->classDef,n,bcd->prot,0,distance,bcd->usedName, - // templSpec,base); - //} addClass(bcd->classDef,n,bcd->prot,0,distance,bcd->usedName, bcd->templSpecifiers,base); } if (m_graphType != Inheritance) { + + // ---- Add usage relations + UsesClassDict *dict = m_graphType==Implementation ? cd->usedImplementationClasses() : cd->usedInterfaceClasses(); @@ -1050,30 +892,48 @@ void DotClassGraph::buildGraph(ClassDef *cd,DotNode *n,int distance,bool base) label+=QCString("\\n")+s; } } - //QCString actualArg; - //ClassDef *acd=0; - //printf("-------- usage relation %s->%s templ=`%s'\n", - // cd->name().data(),ucd->classDef->name().data(), - // ucd->templSpecifiers.data()); - //QCString templSpec = substituteTemplateSpec( - // cd,ucd->templSpecifiers); - //computeTemplateInstance(cd,ucd->classDef, templSpec, acd,actualArg); - //if (acd) - //{ - // addClass(acd,n,EdgeInfo::Black,label,distance,actualArg, - // templSpec,base); - //} - //else - //{ - // //printf("Found label=`%s'\n",label.data()); - // addClass(ucd->classDef,n,EdgeInfo::Black,label,distance,0, - // templSpec,base); - //} - addClass(ucd->classDef,n,EdgeInfo::Black,label,distance,0, + addClass(ucd->classDef,n,EdgeInfo::Purple,label,distance,0, ucd->templSpecifiers,base); } } } + + // ---- Add template instantiation relations + + if (Config_getBool("TEMPLATE_RELATIONS")) + { + if (base) // template relations for base classes + { + ClassDef *templMaster=cd->templateMaster(); + if (templMaster) + { + QDictIterator cli(*templMaster->getTemplateInstances()); + ClassDef *templInstance; + for (;(templInstance=cli.current());++cli) + { + if (templInstance==cd) + { + addClass(templMaster,n,EdgeInfo::Orange,cli.currentKey(),distance,0, + 0,TRUE); + } + } + } + } + else // template relations for super classes + { + QDict *templInstances = cd->getTemplateInstances(); + if (templInstances) + { + QDictIterator cli(*templInstances); + ClassDef *templInstance; + for (;(templInstance=cli.current());++cli) + { + addClass(templInstance,n,EdgeInfo::Orange,cli.currentKey(),distance,0, + 0,FALSE); + } + } + } + } } DotClassGraph::DotClassGraph(ClassDef *cd,GraphType t,int maxRecursionDepth) diff --git a/src/dot.h b/src/dot.h index bfd518e..9b64998 100644 --- a/src/dot.h +++ b/src/dot.h @@ -30,7 +30,7 @@ enum GraphOutputFormat { GIF , EPS }; struct EdgeInfo { - enum Colors { Blue=0, Green=1, Red=2, Black=3, Grey=4 }; + enum Colors { Blue=0, Green=1, Red=2, Purple=3, Grey=4, Orange=5 }; enum Styles { Solid=0, Dashed=1 }; EdgeInfo() : m_color(0), m_style(0), m_labColor(0) {} ~EdgeInfo() {} @@ -60,7 +60,7 @@ class DotNode DotNode(int n,const char *lab,const char *url,int distance = 0,bool rootNode=FALSE); ~DotNode(); void addChild(DotNode *n, - int edgeColor=EdgeInfo::Black, + int edgeColor=EdgeInfo::Purple, int edgeStyle=EdgeInfo::Solid, const char *edgeLab=0, const char *edgeURL=0, diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 70f7d98..6771f9c 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -2527,7 +2527,7 @@ static void findUsedClassesForClass(Entry *root, usedCd = new ClassDef( masterCd->getDefFileName(),masterCd->getDefLine(), usedName,ClassDef::Class); - usedCd->setIsTemplateBaseClass(count); + //usedCd->setIsTemplateBaseClass(count); Doxygen::hiddenClasses.inSort(usedName,usedCd); } if (isArtificial) usedCd->setClassIsArtificial(); @@ -2599,36 +2599,43 @@ static void findBaseClassesForClass( BaseInfo *bi=0; for (bii.toFirst();(bi=bii.current());++bii) { - bool delTempNames=FALSE; - if (templateNames==0) - { - templateNames = getTemplateArgumentsInName(formalArgs,bi->name); - delTempNames=TRUE; - } - BaseInfo tbi(bi->name,bi->prot,bi->virt); - if (actualArgs) // substitute the formal template arguments of the base class - { - tbi.name = substituteTemplateArgumentsInString(bi->name,formalArgs,actualArgs); - } + //printf("masterCd=%s bi->name=%s\n",masterCd->localName().data(),bi->name.data()); + //if ( masterCd->localName()!=bi->name.left(masterCd->localName().length()) + // || bi->name.at(masterCd->localName().length())!='<' + // ) // to avoid recursive lock-up in cases like + // // template class A : public A + //{ + bool delTempNames=FALSE; + if (templateNames==0) + { + templateNames = getTemplateArgumentsInName(formalArgs,bi->name); + delTempNames=TRUE; + } + BaseInfo tbi(bi->name,bi->prot,bi->virt); + if (actualArgs) // substitute the formal template arguments of the base class + { + tbi.name = substituteTemplateArgumentsInString(bi->name,formalArgs,actualArgs); + } - if (mode==DocumentedOnly) - { - // find a documented base class in the correct scope - if (!findClassRelation(root,instanceCd,&tbi,templateNames,DocumentedOnly,isArtificial)) + if (mode==DocumentedOnly) { - // no documented base class -> try to find an undocumented one - findClassRelation(root,instanceCd,&tbi,templateNames,Undocumented,isArtificial); + // find a documented base class in the correct scope + if (!findClassRelation(root,instanceCd,&tbi,templateNames,DocumentedOnly,isArtificial)) + { + // no documented base class -> try to find an undocumented one + findClassRelation(root,instanceCd,&tbi,templateNames,Undocumented,isArtificial); + } } - } - else if (mode==TemplateInstances) - { - findClassRelation(root,instanceCd,&tbi,templateNames,TemplateInstances,isArtificial); - } - if (delTempNames) - { - delete templateNames; - templateNames=0; - } + else if (mode==TemplateInstances) + { + findClassRelation(root,instanceCd,&tbi,templateNames,TemplateInstances,isArtificial); + } + if (delTempNames) + { + delete templateNames; + templateNames=0; + } + //} } } @@ -2736,9 +2743,11 @@ static bool findClassRelation( // baseClass?baseClass->name().data():"", // templSpec.data() // ); - if (baseClassName!=root->name) // Check for base class with the same name. - // If found then look in the outer scope for a match - // and prevent recursion. + if (baseClassName.left(root->name.length())!=root->name || + baseClassName.at(root->name.length())!='<' + ) // Check for base class with the same name. + // If found then look in the outer scope for a match + // and prevent recursion. { Debug::print( Debug::Classes,0," class relation %s inherited by %s found (%s and %s)\n", @@ -2942,17 +2951,17 @@ static bool findClassRelation( baseClass->insertUsedFile(root->fileName); // is this an inherited template argument? //printf("%s->setIsTemplateBaseClass(%d)\n",baseClass->name().data(),isTemplBaseClass); - if (isATemplateArgument) - { - baseClass->setIsTemplateBaseClass(*templateNames->find(bi->name)); - } + //if (isATemplateArgument) + //{ + // baseClass->setIsTemplateBaseClass(*templateNames->find(bi->name)); + //} // add class to the list - if (!isATemplateArgument) - { - } - else - { - } + //if (!isATemplateArgument) + //{ + //} + //else + //{ + //} return TRUE; } else @@ -3117,10 +3126,6 @@ static void computeTemplateClassRelations() for (tdi.toFirst();(tcd=tdi.current());++tdi) // for each template instance { Debug::print(Debug::Classes,0," Template instance %s : \n",tcd->name().data()); - //QCString templName = tcd->name(); - //int index = templName.find('<'); - //ASSERT(index!=-1); - // templName.right(templName.length()-index); QCString templSpec = tdi.currentKey().data(); ArgumentList *templArgs = new ArgumentList; stringToArgumentList(templSpec,templArgs); @@ -3214,7 +3219,7 @@ static void computeMemberReferences() //---------------------------------------------------------------------- -static void addClassMemberTodoTestBufReferences(Definition *compound) +static void addClassMemberTodoTestBugReferences(Definition *compound) { MemberNameListIterator mnli(Doxygen::memberNameList); MemberName *mn=0; @@ -3229,7 +3234,7 @@ static void addClassMemberTodoTestBufReferences(Definition *compound) if (d) scopeName=d->name(); if (d==0) d=md->getGroupDef(); if (d==0) d=md->getFileDef(); - if (compound==d || (compound==0 && d!=0 && !md->visited)) + if (d!=0 && ((compound==0 && !md->visited) || compound==d)) { QCString memLabel; md->visited=TRUE; @@ -3247,7 +3252,7 @@ static void addClassMemberTodoTestBufReferences(Definition *compound) } } -static void addFileMemberTodoTestBufReferences(Definition *compound) +static void addFileMemberTodoTestBugReferences(Definition *compound) { MemberNameListIterator fnli(Doxygen::functionNameList); MemberName *mn=0; @@ -3262,7 +3267,7 @@ static void addFileMemberTodoTestBufReferences(Definition *compound) if (d) scopeName=d->name(); if (d==0) d=md->getGroupDef(); if (d==0) d=md->getFileDef(); - if (compound==d || (compound==0 && d!=0 && !md->visited)) + if (d!=0 && ((compound==0 && !md->visited) || compound==d)) { QCString memLabel; md->visited=TRUE; @@ -3312,7 +3317,7 @@ static void addTodoTestBugReferences() theTranslator->trClass(TRUE,TRUE), cd->getOutputFileBase(),cd->name() ); - addClassMemberTodoTestBufReferences(cd); + addClassMemberTodoTestBugReferences(cd); } FileName *fn=Doxygen::inputNameList.first(); while (fn) @@ -3323,7 +3328,7 @@ static void addTodoTestBugReferences() addRefItem(fd->todoId(),fd->testId(),fd->bugId(), theTranslator->trFile(TRUE,TRUE), fd->getOutputFileBase(),fd->name()); - addFileMemberTodoTestBufReferences(fd); + addFileMemberTodoTestBugReferences(fd); fd=fn->next(); } fn=Doxygen::inputNameList.next(); @@ -3334,7 +3339,7 @@ static void addTodoTestBugReferences() addRefItem(nd->todoId(),nd->testId(),nd->bugId(), theTranslator->trNamespace(TRUE,TRUE), nd->getOutputFileBase(),nd->name()); - addFileMemberTodoTestBufReferences(nd); + addFileMemberTodoTestBugReferences(nd); nd=Doxygen::namespaceList.next(); } GroupDef *gd=Doxygen::groupList.first(); @@ -3343,7 +3348,7 @@ static void addTodoTestBugReferences() addRefItem(gd->todoId(),gd->testId(),gd->bugId(), theTranslator->trGroup(TRUE,TRUE), gd->getOutputFileBase(),gd->groupTitle()); - addFileMemberTodoTestBufReferences(gd); + addFileMemberTodoTestBugReferences(gd); gd=Doxygen::groupList.next(); } PageSDictIterator pdi(*Doxygen::pageSDict); @@ -3354,8 +3359,8 @@ static void addTodoTestBugReferences() theTranslator->trPage(TRUE,TRUE), pi->name,pi->title); } - addClassMemberTodoTestBufReferences(0); - addFileMemberTodoTestBufReferences(0); + addClassMemberTodoTestBugReferences(0); + addFileMemberTodoTestBugReferences(0); } @@ -5143,8 +5148,8 @@ static void generateClassDocs() { ClassDef *cd=cli.current(); if ( cd->isLinkableInProject() && cd->templateMaster()==0 && - (cd->getOuterScope()==0 || - cd->getOuterScope()->definitionType()!=Definition::TypeClass + (cd->getOuterScope()==0 || // <-- should not happen + cd->getOuterScope()==Doxygen::globalScope ) ) // skip external references, anonymous compounds and // template instances and nested classes @@ -5465,10 +5470,10 @@ static void findMainPage(Entry *root) */ static void buildPackageList(Entry *root) { - if (root->section == Entry::PACKAGE_SEC) + if (root->section == Entry::PACKAGE_SEC || root->section == Entry::PACKAGEDOC_SEC && !root->name.isEmpty()) { PackageDef *pd=0; - if (!root->name.isEmpty() && (pd=Doxygen::packageDict.find(root->name))==0) + if ((pd=Doxygen::packageDict.find(root->name))==0) { QCString tagName; if (root->tagInfo) @@ -5477,16 +5482,26 @@ static void buildPackageList(Entry *root) } pd = new PackageDef(root->fileName,root->startLine,root->name,tagName); Doxygen::packageDict.inSort(root->name,pd); + pd->setDocumentation(root->doc); + pd->setBriefDescription(root->brief); } - if (pd) + else { - bool ambig; - FileDef *fd=findFileDef(Doxygen::inputNameDict,root->fileName,ambig); - if (fd) + if (!pd->documentation() && !root->doc.isEmpty()) + { + pd->setDocumentation(root->doc); + } + if (!pd->briefDescription() && !root->brief.isEmpty()) { - fd->setPackageDef(pd); + pd->setBriefDescription(root->brief); } } + bool ambig; + FileDef *fd=findFileDef(Doxygen::inputNameDict,root->fileName,ambig); + if (fd) + { + fd->setPackageDef(pd); + } } EntryListIterator eli(*root->sublist); Entry *e; @@ -5498,6 +5513,8 @@ static void buildPackageList(Entry *root) //---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + /*! Add Java classes to their respective packages */ static void addClassesToPackages() { @@ -5730,6 +5747,22 @@ static void generateNamespaceDocs() msg("Generating docs for namespace %s\n",nd->name().data()); nd->writeDocumentation(*outputList); } + ClassSDict::Iterator cli(Doxygen::classSDict); + for ( ; cli.current() ; ++cli ) + { + ClassDef *cd=cli.current(); + if ( cd->getOuterScope()==nd && + cd->isLinkableInProject() && + cd->templateMaster()==0 + ) // skip external references, anonymous compounds and + // template instances and nested classes + { + msg("Generating docs for compound %s...\n",cd->name().data()); + + cd->writeDocumentation(*outputList); + cd->writeMemberList(*outputList); + } + } } } diff --git a/src/entry.h b/src/entry.h index 3a68808..146ce57 100644 --- a/src/entry.h +++ b/src/entry.h @@ -215,7 +215,8 @@ class Entry MAINPAGEDOC_SEC = 0x01200000, MEMBERGRP_SEC = 0x01300000, USINGDECL_SEC = 0x01400000, - PACKAGE_SEC = 0x01500000 + PACKAGE_SEC = 0x01500000, + PACKAGEDOC_SEC = 0x01600000, }; enum MemberSpecifier { diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index da43e85..a69d631 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -899,7 +899,7 @@ void HtmlGenerator::endMemberDocName() void HtmlGenerator::startParameterList() { DBG_HTML(t << "" << endl;) - t << " ( " << endl; + t << " ( " << endl; } void HtmlGenerator::startParameterType(bool first) @@ -948,7 +948,7 @@ void HtmlGenerator::endParameterName(bool last,bool emptyList) t << " " << endl; t << " " << endl; t << " " << endl; - t << " ) " << endl; + t << " ) " << endl; t << " "; } } diff --git a/src/htmlgen.h b/src/htmlgen.h index 9bc9ffb..6f60593 100644 --- a/src/htmlgen.h +++ b/src/htmlgen.h @@ -176,11 +176,12 @@ class HtmlGenerator : public OutputGenerator void writeRing(char c) { t << "&" << c << "ring;"; } void writeSharpS() { t << "ß"; } void writeCCedil(char c) { t << "&" << c << "cedil;"; } - void startDescList() { t << "
    " << endl; } + void startDescList() { t << "
    " << endl; } void endDescList() { t << "
    "; } - void startParamList() { startDescList(); } + void startParamList(ParamListTypes) + { startDescList(); } void endParamList() { endDescList(); } - void endDescTitle() {} + void endDescTitle() { t << ""; } void writeDescItem() { t << "
    " << endl; } void startSection(const char *,const char *,bool); void endSection(const char *,bool); diff --git a/src/index.cpp b/src/index.cpp index 5e3e53f..d1ea611 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -1194,10 +1194,10 @@ void writeAlphabeticalClassList(OutputList &ol) { if (cd->isLinkableInProject() && cd->templateMaster()==0) { - int index = getPrefixIndex(cd->localName()); - if (toupper(cd->name().at(index))!=startLetter) // new begin letter => new header + int index = getPrefixIndex(cd->className()); + if (toupper(cd->className().at(index))!=startLetter) // new begin letter => new header { - startLetter=toupper(cd->name().at(index)); + startLetter=toupper(cd->className().at(index)); headerItems++; } } @@ -1227,11 +1227,11 @@ void writeAlphabeticalClassList(OutputList &ol) { if (cd->isLinkableInProject() && cd->templateMaster()==0) { - int index = getPrefixIndex(cd->localName()); - if (toupper(cd->name().at(index))!=startLetter) + int index = getPrefixIndex(cd->className()); + if (toupper(cd->className().at(index))!=startLetter) { // insert a new header using a dummy class pointer. - startLetter=toupper(cd->name().at(index)); + startLetter=toupper(cd->className().at(index)); colList[col].append((ClassDef *)8); // insert dummy for the header row++; if ( row >= rows + ((colname().data() : ""); - int index = getPrefixIndex(cd->localName()); - startLetter=toupper(cd->name().at(index)); + int index = getPrefixIndex(cd->className()); + startLetter=toupper(cd->className().at(index)); char s[2]; s[0]=startLetter; s[1]=0; ol.writeIndexHeading(s); } @@ -1291,7 +1291,7 @@ void writeAlphabeticalClassList(OutputList &ol) } else { - extractNamespaceName(cd->name(),cname,namesp); + cname=cd->className(); } ol.writeObjectLink(cd->getReference(), diff --git a/src/latexgen.h b/src/latexgen.h index f2fca5a..51d2b61 100644 --- a/src/latexgen.h +++ b/src/latexgen.h @@ -185,7 +185,8 @@ class LatexGenerator : public OutputGenerator void endMemberDescription() { t << "\\item\\end{CompactList}"; } void startDescList() { t << "\\begin{Desc}\n\\item["; } void endDescList() { t << "\\end{Desc}" << endl; } - void startParamList() { startDescList(); } + void startParamList(ParamListTypes) + { startDescList(); } void endParamList() { endDescList(); } void endDescTitle() { t << "]"; } void writeDescItem() { t << "\\par" << endl; } diff --git a/src/mangen.h b/src/mangen.h index 92fcc3a..4a03abb 100644 --- a/src/mangen.h +++ b/src/mangen.h @@ -172,7 +172,7 @@ class ManGenerator : public OutputGenerator void endMemberDescription() { t << "\\fP\""; firstCol=FALSE; } void startDescList(); void endDescList() {} - void startParamList() { startDescList(); } + void startParamList(ParamListTypes) { startDescList(); } void endParamList() { endDescList(); } void endDescTitle(); void writeDescItem(); diff --git a/src/memberdef.cpp b/src/memberdef.cpp index 9c04b94..f230ea6 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -359,10 +359,29 @@ MemberDef::~MemberDef() delete m_defTmpArgLists; } +void MemberDef::setReimplements(MemberDef *md) +{ + if (m_templateMaster) + { + m_templateMaster->setReimplements(md); + } + else + { + redefines=md; + } +} + void MemberDef::insertReimplementedBy(MemberDef *md) { - if (redefinedBy==0) redefinedBy = new MemberList; - redefinedBy->inSort(md); + if (m_templateMaster) + { + m_templateMaster->insertReimplementedBy(md); + } + else + { + if (redefinedBy==0) redefinedBy = new MemberList; + redefinedBy->inSort(md); + } } void MemberDef::insertEnumField(MemberDef *md) @@ -1472,18 +1491,31 @@ void MemberDef::warnIfUndocumented() bool MemberDef::isLinkableInProject() const { - return !name().isEmpty() && name().at(0)!='@' && - ((hasDocumentation() && !isReference()) - ) && - (prot!=Private || Config_getBool("EXTRACT_PRIVATE") || - mtype==Friend) && // not a hidden member due to protection - (classDef!=0 || Config_getBool("EXTRACT_STATIC") || - !isStatic()); // not a static file/namespace member + if (m_templateMaster) + { + return m_templateMaster->isLinkableInProject(); + } + else + { + return !name().isEmpty() && name().at(0)!='@' && + (hasDocumentation() && !isReference()) && + (prot!=Private || Config_getBool("EXTRACT_PRIVATE") || + mtype==Friend) && // not a hidden member due to protection + (classDef!=0 || Config_getBool("EXTRACT_STATIC") || + !isStatic()); // not a static file/namespace member + } } bool MemberDef::isLinkable() const { - return isLinkableInProject() || isReference(); + if (m_templateMaster) + { + return m_templateMaster->isLinkable(); + } + else + { + return isLinkableInProject() || isReference(); + } } void MemberDef::setEnumDecl(OutputList &ed) diff --git a/src/memberdef.h b/src/memberdef.h index 9f28afc..7e8c773 100644 --- a/src/memberdef.h +++ b/src/memberdef.h @@ -161,7 +161,7 @@ class MemberDef : public Definition void warnIfUndocumented(); // relation to other members - void setReimplements(MemberDef *md) { redefines=md; } + void setReimplements(MemberDef *md); void insertReimplementedBy(MemberDef *md); MemberDef *reimplements() const { return redefines; } MemberList *reimplementedBy() const { return redefinedBy; } diff --git a/src/outputgen.h b/src/outputgen.h index 7253c11..8d05ef5 100644 --- a/src/outputgen.h +++ b/src/outputgen.h @@ -40,6 +40,7 @@ class DotGfxHierarchyTable; class BaseOutputDocInterface { public: + enum ParamListTypes { Param, RetVal, Exception }; /*! Start of a bullet list: e.g. \c
      in html. writeListItem() is * Used for the bullet items. @@ -208,7 +209,7 @@ class BaseOutputDocInterface virtual void writeCCedil(char) = 0; virtual void startDescList() = 0; virtual void endDescList() = 0; - virtual void startParamList() = 0; + virtual void startParamList(ParamListTypes t) = 0; virtual void endParamList() = 0; virtual void endDescTitle() = 0; virtual void writeDescItem() = 0; diff --git a/src/outputlist.cpp b/src/outputlist.cpp index cba5c17..06d2ebc 100644 --- a/src/outputlist.cpp +++ b/src/outputlist.cpp @@ -261,6 +261,7 @@ FORALL1(int a1,a1) FORALL1(DotClassGraph &a1,a1) FORALL1(DotInclDepGraph &a1,a1) FORALL1(DotGfxHierarchyTable &a1,a1) +FORALL1(ParamListTypes a1,a1) #if defined(HAS_BOOL_TYPE) || defined(Q_HAS_BOOL_TYPE) FORALL1(bool a1,a1) FORALL2(bool a1,int a2,a1,a2) diff --git a/src/outputlist.h b/src/outputlist.h index 065144a..b96fc80 100644 --- a/src/outputlist.h +++ b/src/outputlist.h @@ -310,8 +310,8 @@ class OutputList : public OutputDocInterface { forall(&OutputGenerator::startDescList); } void endDescList() { forall(&OutputGenerator::endDescList); } - void startParamList() - { forall(&OutputGenerator::startParamList); } + void startParamList(ParamListTypes t) + { forall(&OutputGenerator::startParamList,t); } void endParamList() { forall(&OutputGenerator::endParamList); } void endDescTitle() @@ -455,6 +455,7 @@ class OutputList : public OutputDocInterface FORALLPROTO1(DotClassGraph &); FORALLPROTO1(DotInclDepGraph &); FORALLPROTO1(DotGfxHierarchyTable &); + FORALLPROTO1(ParamListTypes); #if defined(HAS_BOOL_TYPE) || defined(Q_HAS_BOOL_TYPE) FORALLPROTO1(bool); FORALLPROTO2(bool,int); diff --git a/src/rtfgen.h b/src/rtfgen.h index d2189a8..16d2b35 100644 --- a/src/rtfgen.h +++ b/src/rtfgen.h @@ -168,7 +168,7 @@ class RTFGenerator : public OutputGenerator void endMemberDescription(); void startDescList(); void endDescList(); - void startParamList() { startDescList(); } + void startParamList(ParamListTypes) { startDescList(); } void endParamList() { endDescList(); } void endDescTitle(); void writeDescItem(); diff --git a/src/scanner.l b/src/scanner.l index 9f60f21..52326e8 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -419,7 +419,7 @@ static int yyread(char *buf,int max_size) %} CMD ("\\"|"@") -SECTIONCMD {CMD}("image"|"author"|"internal"|"version"|"date"|"deprecated"|"param"|"exception"|"return"[s]?|"retval"|"bug"|"warning"|"par"|"sa"|"see"|"pre"|"post"|"invariant"|"note"|"remark"[s]?|"todo"|"test"|"ingroup"|"latexonly"|"htmlonly"|"{"|"verbatim") +SECTIONCMD {CMD}("image"|"author"|"internal"|"version"|"date"|"deprecated"|"param"|"exception"|"return"[s]?|"retval"|"bug"|"warning"|"par"|"sa"|"see"|"pre"|"post"|"invariant"|"note"|"remark"[s]?|"todo"|"test"|"ingroup"|"latexonly"|"htmlonly"|"{"|"verbatim") BN [ \t\n\r] BL [ \t\r]*"\n" B [ \t] @@ -468,6 +468,7 @@ TITLE [tT][iI][tT][lL][eE] %x Using %x UsingDirective %x NameSpaceDocArg1 +%x PackageDocArg1 %x SkipCurly %x SkipCurlyCpp %x SkipCurlyEndDoc @@ -1086,21 +1087,12 @@ TITLE [tT][iI][tT][lL][eE] *currentTemplateSpec+=*yytext; } {SCOPENAME} { - // correct for misinterpreting return type as scope name: example: A func() - //printf("YY_START=%d current->tArgList=%p current->mtArgList=%p\n", - // YY_START,current->tArgList,current->mtArgList); - //if (YY_START==FindMembers /*&& current->tArgList*/ && current->mtArgList==0) - //{ - // current->mtArgList=current->tArgList; - // current->tArgList=0; - // current->scopeSpec.resize(0); - //} lineCount(); if (insideIDL && yyleng==9 && strcmp(yytext,"cpp_quote")==0) { BEGIN(CppQuote); } - else if (insideIDL && yyleng==6 && strcmp(yytext,"import")==0) + else if ((insideIDL || insideJava) && yyleng==6 && strcmp(yytext,"import")==0) { BEGIN(NextSemi); } @@ -2511,6 +2503,7 @@ TITLE [tT][iI][tT][lL][eE] {BN}+ { lineCount(); *specName +=' '; } "<<" { *specName += yytext; } ">>" { *specName += yytext; } +"typename"{BN}+ { lineCount(); } . { *specName += *yytext; } @@ -2766,6 +2759,12 @@ TITLE [tT][iI][tT][lL][eE] current->startLine = yyLineNr; BEGIN( NameSpaceDocArg1 ); } +{B}*{CMD}"package"{B}+ { + current->section = Entry::PACKAGEDOC_SEC; + current->fileName = yyFileName; + current->startLine = yyLineNr; + BEGIN( PackageDocArg1 ); + } {B}*{CMD}"class"{B}+ { current->section = Entry::CLASSDOC_SEC; current->fileName = yyFileName; @@ -2986,6 +2985,18 @@ TITLE [tT][iI][tT][lL][eE] ); yyLineNr++; } +{SCOPENAME} { + current->name = yytext; + newDocState(); + } +"\\"{B}*"\n" { yyLineNr++; } +"\n" { + warn(yyFileName,yyLineNr, + "Warning: missing argument after " + "\\package." + ); + yyLineNr++; + } {SCOPENAME}/"<" { current->name = yytext; // prepend outer scope name diff --git a/src/util.cpp b/src/util.cpp index e766b3f..24cfa66 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -2819,7 +2819,7 @@ QCString convertNameToFile(const char *name,bool allowDots) } else { - num = (int)value; + num = *(int*)&value; } QCString result; result.sprintf("a%05d",num); @@ -3109,10 +3109,13 @@ bool extractClassNameFromType(const QCString &type,int &pos,QCString &name,QCStr /*! Substitutes any occurrence of a formal argument from argument list * \a formalArgs in \a name by the corresponding actual argument in * argument list \a actualArgs. The result after substitution - * is returned as a string. + * is returned as a string. The argument \a className is used to + * prevent recursive substitution. */ QCString substituteTemplateArgumentsInString( - const QCString &name,ArgumentList *formalArgs,ArgumentList *actualArgs) + const QCString &name, + ArgumentList *formalArgs, + ArgumentList *actualArgs) { //printf("substituteTemplateArgumentsInString(name=%s formal=%s actualArg=%s)\n", // name.data(),argListToString(formalArgs).data(),argListToString(actualArgs).data()); diff --git a/src/util.h b/src/util.h index 04fd752..c61bd33 100644 --- a/src/util.h +++ b/src/util.h @@ -153,7 +153,9 @@ void addMembersToMemberGroup(MemberList *ml,MemberGroupDict *memberGroupDict, bool extractClassNameFromType(const QCString &type,int &pos, QCString &name,QCString &templSpec); QCString substituteTemplateArgumentsInString( - const QCString &name,ArgumentList *formalArgs,ArgumentList *actualArgs); + const QCString &name, + ArgumentList *formalArgs, + ArgumentList *actualArgs); ArgumentList *copyArgumentList(const ArgumentList *src); QList *copyArgumentLists(const QList *srcLists); diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp index 3b9d404..736ae0a 100644 --- a/src/xmlgen.cpp +++ b/src/xmlgen.cpp @@ -329,11 +329,16 @@ class XMLGenerator : public OutputDocInterface endNestedPar(); m_t << ""; } - void startParamList() + void startParamList(ParamListTypes t) { - m_t << ""; // non DocBook - // TODO: what kind of list - // param, retval, exception + QCString kind; + switch(t) + { + case Param: kind="param"; break; + case RetVal: kind="retval"; break; + case Exception: kind="exception"; break; + } + m_t << "<parameterlist kind=\"" << kind << "\"><title>"; // non DocBook m_inParamList = TRUE; } void endParamList() diff --git a/tmake/lib/unix/generic.t b/tmake/lib/unix/generic.t index 88b731a..53f4e0a 100755 --- a/tmake/lib/unix/generic.t +++ b/tmake/lib/unix/generic.t @@ -67,7 +67,7 @@ if ( Config("moc") ) { $moc_aware = 1; } - Project('TMAKE_LIBS += $$LIBS'); + Project('TMAKE_LIBS = $$LIBS $$TMAKE_LIBS'); if ( !Project("TMAKE_RUN_CC") ) { Project('TMAKE_RUN_CC = $(CC) -c $(CFLAGS) $(INCPATH) -o $obj $src'); } -- cgit v0.12 ='n1828' href='#n1828'>1828</a> <a id='n1829' href='#n1829'>1829</a> <a id='n1830' href='#n1830'>1830</a> <a id='n1831' href='#n1831'>1831</a> <a id='n1832' href='#n1832'>1832</a> <a id='n1833' href='#n1833'>1833</a> <a id='n1834' href='#n1834'>1834</a> <a id='n1835' href='#n1835'>1835</a> <a id='n1836' href='#n1836'>1836</a> <a id='n1837' href='#n1837'>1837</a> <a id='n1838' href='#n1838'>1838</a> <a id='n1839' href='#n1839'>1839</a> <a id='n1840' href='#n1840'>1840</a> <a id='n1841' href='#n1841'>1841</a> <a id='n1842' href='#n1842'>1842</a> <a id='n1843' href='#n1843'>1843</a> <a id='n1844' href='#n1844'>1844</a> <a id='n1845' href='#n1845'>1845</a> <a id='n1846' href='#n1846'>1846</a> <a id='n1847' href='#n1847'>1847</a> <a id='n1848' href='#n1848'>1848</a> <a id='n1849' href='#n1849'>1849</a> <a id='n1850' href='#n1850'>1850</a> <a id='n1851' href='#n1851'>1851</a> <a id='n1852' href='#n1852'>1852</a> <a id='n1853' href='#n1853'>1853</a> <a id='n1854' href='#n1854'>1854</a> <a id='n1855' href='#n1855'>1855</a> <a id='n1856' href='#n1856'>1856</a> <a id='n1857' href='#n1857'>1857</a> <a id='n1858' href='#n1858'>1858</a> <a id='n1859' href='#n1859'>1859</a> <a id='n1860' href='#n1860'>1860</a> <a id='n1861' href='#n1861'>1861</a> <a id='n1862' href='#n1862'>1862</a> <a id='n1863' href='#n1863'>1863</a> <a id='n1864' href='#n1864'>1864</a> <a id='n1865' href='#n1865'>1865</a> <a id='n1866' href='#n1866'>1866</a> <a id='n1867' href='#n1867'>1867</a> <a id='n1868' href='#n1868'>1868</a> <a id='n1869' href='#n1869'>1869</a> <a id='n1870' href='#n1870'>1870</a> <a id='n1871' href='#n1871'>1871</a> <a id='n1872' href='#n1872'>1872</a> <a id='n1873' href='#n1873'>1873</a> <a id='n1874' href='#n1874'>1874</a> <a id='n1875' href='#n1875'>1875</a> <a id='n1876' href='#n1876'>1876</a> <a id='n1877' href='#n1877'>1877</a> <a id='n1878' href='#n1878'>1878</a> <a id='n1879' href='#n1879'>1879</a> <a id='n1880' href='#n1880'>1880</a> <a id='n1881' href='#n1881'>1881</a> <a id='n1882' href='#n1882'>1882</a> <a id='n1883' href='#n1883'>1883</a> <a id='n1884' href='#n1884'>1884</a> <a id='n1885' href='#n1885'>1885</a> <a id='n1886' href='#n1886'>1886</a> <a id='n1887' href='#n1887'>1887</a> <a id='n1888' href='#n1888'>1888</a> <a id='n1889' href='#n1889'>1889</a> <a id='n1890' href='#n1890'>1890</a> <a id='n1891' href='#n1891'>1891</a> <a id='n1892' href='#n1892'>1892</a> <a id='n1893' href='#n1893'>1893</a> <a id='n1894' href='#n1894'>1894</a> <a id='n1895' href='#n1895'>1895</a> <a id='n1896' href='#n1896'>1896</a> <a id='n1897' href='#n1897'>1897</a> <a id='n1898' href='#n1898'>1898</a> <a id='n1899' href='#n1899'>1899</a> <a id='n1900' href='#n1900'>1900</a> <a id='n1901' href='#n1901'>1901</a> <a id='n1902' href='#n1902'>1902</a> <a id='n1903' href='#n1903'>1903</a> <a id='n1904' href='#n1904'>1904</a> <a id='n1905' href='#n1905'>1905</a> <a id='n1906' href='#n1906'>1906</a> <a id='n1907' href='#n1907'>1907</a> <a id='n1908' href='#n1908'>1908</a> <a id='n1909' href='#n1909'>1909</a> <a id='n1910' href='#n1910'>1910</a> <a id='n1911' href='#n1911'>1911</a> <a id='n1912' href='#n1912'>1912</a> <a id='n1913' href='#n1913'>1913</a> <a id='n1914' href='#n1914'>1914</a> <a id='n1915' href='#n1915'>1915</a> <a id='n1916' href='#n1916'>1916</a> <a id='n1917' href='#n1917'>1917</a> <a id='n1918' href='#n1918'>1918</a> <a id='n1919' href='#n1919'>1919</a> <a id='n1920' href='#n1920'>1920</a> <a id='n1921' href='#n1921'>1921</a> <a id='n1922' href='#n1922'>1922</a> <a id='n1923' href='#n1923'>1923</a> <a id='n1924' href='#n1924'>1924</a> <a id='n1925' href='#n1925'>1925</a> <a id='n1926' href='#n1926'>1926</a> <a id='n1927' href='#n1927'>1927</a> <a id='n1928' href='#n1928'>1928</a> <a id='n1929' href='#n1929'>1929</a> <a id='n1930' href='#n1930'>1930</a> <a id='n1931' href='#n1931'>1931</a> <a id='n1932' href='#n1932'>1932</a> <a id='n1933' href='#n1933'>1933</a> <a id='n1934' href='#n1934'>1934</a> <a id='n1935' href='#n1935'>1935</a> <a id='n1936' href='#n1936'>1936</a> <a id='n1937' href='#n1937'>1937</a> <a id='n1938' href='#n1938'>1938</a> <a id='n1939' href='#n1939'>1939</a> <a id='n1940' href='#n1940'>1940</a> <a id='n1941' href='#n1941'>1941</a> <a id='n1942' href='#n1942'>1942</a> <a id='n1943' href='#n1943'>1943</a> <a id='n1944' href='#n1944'>1944</a> <a id='n1945' href='#n1945'>1945</a> <a id='n1946' href='#n1946'>1946</a> <a id='n1947' href='#n1947'>1947</a> <a id='n1948' href='#n1948'>1948</a> <a id='n1949' href='#n1949'>1949</a> <a id='n1950' href='#n1950'>1950</a> <a id='n1951' href='#n1951'>1951</a> <a id='n1952' href='#n1952'>1952</a> <a id='n1953' href='#n1953'>1953</a> <a id='n1954' href='#n1954'>1954</a> <a id='n1955' href='#n1955'>1955</a> <a id='n1956' href='#n1956'>1956</a> <a id='n1957' href='#n1957'>1957</a> <a id='n1958' href='#n1958'>1958</a> <a id='n1959' href='#n1959'>1959</a> <a id='n1960' href='#n1960'>1960</a> <a id='n1961' href='#n1961'>1961</a> <a id='n1962' href='#n1962'>1962</a> <a id='n1963' href='#n1963'>1963</a> <a id='n1964' href='#n1964'>1964</a> <a id='n1965' href='#n1965'>1965</a> <a id='n1966' href='#n1966'>1966</a> <a id='n1967' href='#n1967'>1967</a> <a id='n1968' href='#n1968'>1968</a> <a id='n1969' href='#n1969'>1969</a> <a id='n1970' href='#n1970'>1970</a> <a id='n1971' href='#n1971'>1971</a> <a id='n1972' href='#n1972'>1972</a> <a id='n1973' href='#n1973'>1973</a> <a id='n1974' href='#n1974'>1974</a> <a id='n1975' href='#n1975'>1975</a> <a id='n1976' href='#n1976'>1976</a> <a id='n1977' href='#n1977'>1977</a> <a id='n1978' href='#n1978'>1978</a> <a id='n1979' href='#n1979'>1979</a> <a id='n1980' href='#n1980'>1980</a> <a id='n1981' href='#n1981'>1981</a> <a id='n1982' href='#n1982'>1982</a> <a id='n1983' href='#n1983'>1983</a> <a id='n1984' href='#n1984'>1984</a> <a id='n1985' href='#n1985'>1985</a> <a id='n1986' href='#n1986'>1986</a> <a id='n1987' href='#n1987'>1987</a> <a id='n1988' href='#n1988'>1988</a> <a id='n1989' href='#n1989'>1989</a> <a id='n1990' href='#n1990'>1990</a> <a id='n1991' href='#n1991'>1991</a> <a id='n1992' href='#n1992'>1992</a> <a id='n1993' href='#n1993'>1993</a> <a id='n1994' href='#n1994'>1994</a> <a id='n1995' href='#n1995'>1995</a> <a id='n1996' href='#n1996'>1996</a> <a id='n1997' href='#n1997'>1997</a> <a id='n1998' href='#n1998'>1998</a> <a id='n1999' href='#n1999'>1999</a> <a id='n2000' href='#n2000'>2000</a> <a id='n2001' href='#n2001'>2001</a> <a id='n2002' href='#n2002'>2002</a> <a id='n2003' href='#n2003'>2003</a> <a id='n2004' href='#n2004'>2004</a> <a id='n2005' href='#n2005'>2005</a> <a id='n2006' href='#n2006'>2006</a> <a id='n2007' href='#n2007'>2007</a> <a id='n2008' href='#n2008'>2008</a> <a id='n2009' href='#n2009'>2009</a> <a id='n2010' href='#n2010'>2010</a> <a id='n2011' href='#n2011'>2011</a> <a id='n2012' href='#n2012'>2012</a> <a id='n2013' href='#n2013'>2013</a> <a id='n2014' href='#n2014'>2014</a> <a id='n2015' href='#n2015'>2015</a> <a id='n2016' href='#n2016'>2016</a> <a id='n2017' href='#n2017'>2017</a> <a id='n2018' href='#n2018'>2018</a> <a id='n2019' href='#n2019'>2019</a> <a id='n2020' href='#n2020'>2020</a> <a id='n2021' href='#n2021'>2021</a> <a id='n2022' href='#n2022'>2022</a> <a id='n2023' href='#n2023'>2023</a> <a id='n2024' href='#n2024'>2024</a> <a id='n2025' href='#n2025'>2025</a> <a id='n2026' href='#n2026'>2026</a> <a id='n2027' href='#n2027'>2027</a> <a id='n2028' href='#n2028'>2028</a> <a id='n2029' href='#n2029'>2029</a> <a id='n2030' href='#n2030'>2030</a> <a id='n2031' href='#n2031'>2031</a> <a id='n2032' href='#n2032'>2032</a> <a id='n2033' href='#n2033'>2033</a> <a id='n2034' href='#n2034'>2034</a> <a id='n2035' href='#n2035'>2035</a> <a id='n2036' href='#n2036'>2036</a> <a id='n2037' href='#n2037'>2037</a> <a id='n2038' href='#n2038'>2038</a> <a id='n2039' href='#n2039'>2039</a> <a id='n2040' href='#n2040'>2040</a> <a id='n2041' href='#n2041'>2041</a> <a id='n2042' href='#n2042'>2042</a> <a id='n2043' href='#n2043'>2043</a> <a id='n2044' href='#n2044'>2044</a> <a id='n2045' href='#n2045'>2045</a> <a id='n2046' href='#n2046'>2046</a> <a id='n2047' href='#n2047'>2047</a> <a id='n2048' href='#n2048'>2048</a> <a id='n2049' href='#n2049'>2049</a> <a id='n2050' href='#n2050'>2050</a> <a id='n2051' href='#n2051'>2051</a> <a id='n2052' href='#n2052'>2052</a> <a id='n2053' href='#n2053'>2053</a> <a id='n2054' href='#n2054'>2054</a> <a id='n2055' href='#n2055'>2055</a> <a id='n2056' href='#n2056'>2056</a> <a id='n2057' href='#n2057'>2057</a> <a id='n2058' href='#n2058'>2058</a> <a id='n2059' href='#n2059'>2059</a> <a id='n2060' href='#n2060'>2060</a> <a id='n2061' href='#n2061'>2061</a> <a id='n2062' href='#n2062'>2062</a> <a id='n2063' href='#n2063'>2063</a> <a id='n2064' href='#n2064'>2064</a> <a id='n2065' href='#n2065'>2065</a> <a id='n2066' href='#n2066'>2066</a> <a id='n2067' href='#n2067'>2067</a> <a id='n2068' href='#n2068'>2068</a> <a id='n2069' href='#n2069'>2069</a> <a id='n2070' href='#n2070'>2070</a> <a id='n2071' href='#n2071'>2071</a> <a id='n2072' href='#n2072'>2072</a> <a id='n2073' href='#n2073'>2073</a> <a id='n2074' href='#n2074'>2074</a> <a id='n2075' href='#n2075'>2075</a> <a id='n2076' href='#n2076'>2076</a> <a id='n2077' href='#n2077'>2077</a> <a id='n2078' href='#n2078'>2078</a> <a id='n2079' href='#n2079'>2079</a> <a id='n2080' href='#n2080'>2080</a> <a id='n2081' href='#n2081'>2081</a> <a id='n2082' href='#n2082'>2082</a> <a id='n2083' href='#n2083'>2083</a> <a id='n2084' href='#n2084'>2084</a> <a id='n2085' href='#n2085'>2085</a> <a id='n2086' href='#n2086'>2086</a> <a id='n2087' href='#n2087'>2087</a> <a id='n2088' href='#n2088'>2088</a> <a id='n2089' href='#n2089'>2089</a> <a id='n2090' href='#n2090'>2090</a> <a id='n2091' href='#n2091'>2091</a> <a id='n2092' href='#n2092'>2092</a> <a id='n2093' href='#n2093'>2093</a> <a id='n2094' href='#n2094'>2094</a> <a id='n2095' href='#n2095'>2095</a> <a id='n2096' href='#n2096'>2096</a> <a id='n2097' href='#n2097'>2097</a> <a id='n2098' href='#n2098'>2098</a> <a id='n2099' href='#n2099'>2099</a> <a id='n2100' href='#n2100'>2100</a> <a id='n2101' href='#n2101'>2101</a> <a id='n2102' href='#n2102'>2102</a> <a id='n2103' href='#n2103'>2103</a> <a id='n2104' href='#n2104'>2104</a> <a id='n2105' href='#n2105'>2105</a> <a id='n2106' href='#n2106'>2106</a> <a id='n2107' href='#n2107'>2107</a> <a id='n2108' href='#n2108'>2108</a> <a id='n2109' href='#n2109'>2109</a> <a id='n2110' href='#n2110'>2110</a> <a id='n2111' href='#n2111'>2111</a> <a id='n2112' href='#n2112'>2112</a> <a id='n2113' href='#n2113'>2113</a> <a id='n2114' href='#n2114'>2114</a> <a id='n2115' href='#n2115'>2115</a> <a id='n2116' href='#n2116'>2116</a> <a id='n2117' href='#n2117'>2117</a> <a id='n2118' href='#n2118'>2118</a> <a id='n2119' href='#n2119'>2119</a> <a id='n2120' href='#n2120'>2120</a> <a id='n2121' href='#n2121'>2121</a> <a id='n2122' href='#n2122'>2122</a> <a id='n2123' href='#n2123'>2123</a> <a id='n2124' href='#n2124'>2124</a> <a id='n2125' href='#n2125'>2125</a> <a id='n2126' href='#n2126'>2126</a> <a id='n2127' href='#n2127'>2127</a> <a id='n2128' href='#n2128'>2128</a> <a id='n2129' href='#n2129'>2129</a> <a id='n2130' href='#n2130'>2130</a> <a id='n2131' href='#n2131'>2131</a> <a id='n2132' href='#n2132'>2132</a> <a id='n2133' href='#n2133'>2133</a> <a id='n2134' href='#n2134'>2134</a> <a id='n2135' href='#n2135'>2135</a> <a id='n2136' href='#n2136'>2136</a> <a id='n2137' href='#n2137'>2137</a> <a id='n2138' href='#n2138'>2138</a> <a id='n2139' href='#n2139'>2139</a> <a id='n2140' href='#n2140'>2140</a> <a id='n2141' href='#n2141'>2141</a> <a id='n2142' href='#n2142'>2142</a> <a id='n2143' href='#n2143'>2143</a> <a id='n2144' href='#n2144'>2144</a> <a id='n2145' href='#n2145'>2145</a> <a id='n2146' href='#n2146'>2146</a> <a id='n2147' href='#n2147'>2147</a> <a id='n2148' href='#n2148'>2148</a> <a id='n2149' href='#n2149'>2149</a> <a id='n2150' href='#n2150'>2150</a> <a id='n2151' href='#n2151'>2151</a> <a id='n2152' href='#n2152'>2152</a> <a id='n2153' href='#n2153'>2153</a> <a id='n2154' href='#n2154'>2154</a> <a id='n2155' href='#n2155'>2155</a> <a id='n2156' href='#n2156'>2156</a> <a id='n2157' href='#n2157'>2157</a> <a id='n2158' href='#n2158'>2158</a> <a id='n2159' href='#n2159'>2159</a> <a id='n2160' href='#n2160'>2160</a> <a id='n2161' href='#n2161'>2161</a> <a id='n2162' href='#n2162'>2162</a> <a id='n2163' href='#n2163'>2163</a> <a id='n2164' href='#n2164'>2164</a> <a id='n2165' href='#n2165'>2165</a> <a id='n2166' href='#n2166'>2166</a> <a id='n2167' href='#n2167'>2167</a> <a id='n2168' href='#n2168'>2168</a> <a id='n2169' href='#n2169'>2169</a> <a id='n2170' href='#n2170'>2170</a> <a id='n2171' href='#n2171'>2171</a> <a id='n2172' href='#n2172'>2172</a> <a id='n2173' href='#n2173'>2173</a> <a id='n2174' href='#n2174'>2174</a> <a id='n2175' href='#n2175'>2175</a> <a id='n2176' href='#n2176'>2176</a> <a id='n2177' href='#n2177'>2177</a> <a id='n2178' href='#n2178'>2178</a> <a id='n2179' href='#n2179'>2179</a> <a id='n2180' href='#n2180'>2180</a> <a id='n2181' href='#n2181'>2181</a> <a id='n2182' href='#n2182'>2182</a> <a id='n2183' href='#n2183'>2183</a> <a id='n2184' href='#n2184'>2184</a> <a id='n2185' href='#n2185'>2185</a> <a id='n2186' href='#n2186'>2186</a> <a id='n2187' href='#n2187'>2187</a> <a id='n2188' href='#n2188'>2188</a> <a id='n2189' href='#n2189'>2189</a> <a id='n2190' href='#n2190'>2190</a> <a id='n2191' href='#n2191'>2191</a> <a id='n2192' href='#n2192'>2192</a> <a id='n2193' href='#n2193'>2193</a> <a id='n2194' href='#n2194'>2194</a> <a id='n2195' href='#n2195'>2195</a> <a id='n2196' href='#n2196'>2196</a> <a id='n2197' href='#n2197'>2197</a> <a id='n2198' href='#n2198'>2198</a> <a id='n2199' href='#n2199'>2199</a> <a id='n2200' href='#n2200'>2200</a> <a id='n2201' href='#n2201'>2201</a> <a id='n2202' href='#n2202'>2202</a> <a id='n2203' href='#n2203'>2203</a> <a id='n2204' href='#n2204'>2204</a> <a id='n2205' href='#n2205'>2205</a> <a id='n2206' href='#n2206'>2206</a> <a id='n2207' href='#n2207'>2207</a> <a id='n2208' href='#n2208'>2208</a> <a id='n2209' href='#n2209'>2209</a> <a id='n2210' href='#n2210'>2210</a> <a id='n2211' href='#n2211'>2211</a> <a id='n2212' href='#n2212'>2212</a> <a id='n2213' href='#n2213'>2213</a> <a id='n2214' href='#n2214'>2214</a> <a id='n2215' href='#n2215'>2215</a> <a id='n2216' href='#n2216'>2216</a> <a id='n2217' href='#n2217'>2217</a> <a id='n2218' href='#n2218'>2218</a> <a id='n2219' href='#n2219'>2219</a> <a id='n2220' href='#n2220'>2220</a> <a id='n2221' href='#n2221'>2221</a> <a id='n2222' href='#n2222'>2222</a> <a id='n2223' href='#n2223'>2223</a> <a id='n2224' href='#n2224'>2224</a> <a id='n2225' href='#n2225'>2225</a> <a id='n2226' href='#n2226'>2226</a> <a id='n2227' href='#n2227'>2227</a> <a id='n2228' href='#n2228'>2228</a> <a id='n2229' href='#n2229'>2229</a> <a id='n2230' href='#n2230'>2230</a> <a id='n2231' href='#n2231'>2231</a> <a id='n2232' href='#n2232'>2232</a> <a id='n2233' href='#n2233'>2233</a> <a id='n2234' href='#n2234'>2234</a> <a id='n2235' href='#n2235'>2235</a> <a id='n2236' href='#n2236'>2236</a> <a id='n2237' href='#n2237'>2237</a> <a id='n2238' href='#n2238'>2238</a> <a id='n2239' href='#n2239'>2239</a> <a id='n2240' href='#n2240'>2240</a> <a id='n2241' href='#n2241'>2241</a> <a id='n2242' href='#n2242'>2242</a> <a id='n2243' href='#n2243'>2243</a> <a id='n2244' href='#n2244'>2244</a> <a id='n2245' href='#n2245'>2245</a> <a id='n2246' href='#n2246'>2246</a> <a id='n2247' href='#n2247'>2247</a> <a id='n2248' href='#n2248'>2248</a> <a id='n2249' href='#n2249'>2249</a> <a id='n2250' href='#n2250'>2250</a> <a id='n2251' href='#n2251'>2251</a> <a id='n2252' href='#n2252'>2252</a> <a id='n2253' href='#n2253'>2253</a> <a id='n2254' href='#n2254'>2254</a> <a id='n2255' href='#n2255'>2255</a> <a id='n2256' href='#n2256'>2256</a> <a id='n2257' href='#n2257'>2257</a> <a id='n2258' href='#n2258'>2258</a> <a id='n2259' href='#n2259'>2259</a> <a id='n2260' href='#n2260'>2260</a> <a id='n2261' href='#n2261'>2261</a> <a id='n2262' href='#n2262'>2262</a> <a id='n2263' href='#n2263'>2263</a> <a id='n2264' href='#n2264'>2264</a> <a id='n2265' href='#n2265'>2265</a> <a id='n2266' href='#n2266'>2266</a> <a id='n2267' href='#n2267'>2267</a> <a id='n2268' href='#n2268'>2268</a> <a id='n2269' href='#n2269'>2269</a> <a id='n2270' href='#n2270'>2270</a> <a id='n2271' href='#n2271'>2271</a> <a id='n2272' href='#n2272'>2272</a> <a id='n2273' href='#n2273'>2273</a> <a id='n2274' href='#n2274'>2274</a> <a id='n2275' href='#n2275'>2275</a> <a id='n2276' href='#n2276'>2276</a> <a id='n2277' href='#n2277'>2277</a> <a id='n2278' href='#n2278'>2278</a> <a id='n2279' href='#n2279'>2279</a> <a id='n2280' href='#n2280'>2280</a> <a id='n2281' href='#n2281'>2281</a> <a id='n2282' href='#n2282'>2282</a> <a id='n2283' href='#n2283'>2283</a> <a id='n2284' href='#n2284'>2284</a> <a id='n2285' href='#n2285'>2285</a> <a id='n2286' href='#n2286'>2286</a> <a id='n2287' href='#n2287'>2287</a> <a id='n2288' href='#n2288'>2288</a> <a id='n2289' href='#n2289'>2289</a> <a id='n2290' href='#n2290'>2290</a> <a id='n2291' href='#n2291'>2291</a> <a id='n2292' href='#n2292'>2292</a> <a id='n2293' href='#n2293'>2293</a> <a id='n2294' href='#n2294'>2294</a> <a id='n2295' href='#n2295'>2295</a> <a id='n2296' href='#n2296'>2296</a> <a id='n2297' href='#n2297'>2297</a> <a id='n2298' href='#n2298'>2298</a> <a id='n2299' href='#n2299'>2299</a> <a id='n2300' href='#n2300'>2300</a> <a id='n2301' href='#n2301'>2301</a> <a id='n2302' href='#n2302'>2302</a> <a id='n2303' href='#n2303'>2303</a> <a id='n2304' href='#n2304'>2304</a> <a id='n2305' href='#n2305'>2305</a> <a id='n2306' href='#n2306'>2306</a> <a id='n2307' href='#n2307'>2307</a> <a id='n2308' href='#n2308'>2308</a> <a id='n2309' href='#n2309'>2309</a> <a id='n2310' href='#n2310'>2310</a> <a id='n2311' href='#n2311'>2311</a> <a id='n2312' href='#n2312'>2312</a> <a id='n2313' href='#n2313'>2313</a> <a id='n2314' href='#n2314'>2314</a> <a id='n2315' href='#n2315'>2315</a> <a id='n2316' href='#n2316'>2316</a> <a id='n2317' href='#n2317'>2317</a> <a id='n2318' href='#n2318'>2318</a> <a id='n2319' href='#n2319'>2319</a> <a id='n2320' href='#n2320'>2320</a> <a id='n2321' href='#n2321'>2321</a> <a id='n2322' href='#n2322'>2322</a> <a id='n2323' href='#n2323'>2323</a> <a id='n2324' href='#n2324'>2324</a> <a id='n2325' href='#n2325'>2325</a> <a id='n2326' href='#n2326'>2326</a> <a id='n2327' href='#n2327'>2327</a> <a id='n2328' href='#n2328'>2328</a> <a id='n2329' href='#n2329'>2329</a> <a id='n2330' href='#n2330'>2330</a> <a id='n2331' href='#n2331'>2331</a> <a id='n2332' href='#n2332'>2332</a> <a id='n2333' href='#n2333'>2333</a> <a id='n2334' href='#n2334'>2334</a> <a id='n2335' href='#n2335'>2335</a> <a id='n2336' href='#n2336'>2336</a> <a id='n2337' href='#n2337'>2337</a> <a id='n2338' href='#n2338'>2338</a> <a id='n2339' href='#n2339'>2339</a> <a id='n2340' href='#n2340'>2340</a> <a id='n2341' href='#n2341'>2341</a> <a id='n2342' href='#n2342'>2342</a> <a id='n2343' href='#n2343'>2343</a> <a id='n2344' href='#n2344'>2344</a> <a id='n2345' href='#n2345'>2345</a> <a id='n2346' href='#n2346'>2346</a> <a id='n2347' href='#n2347'>2347</a> <a id='n2348' href='#n2348'>2348</a> <a id='n2349' href='#n2349'>2349</a> <a id='n2350' href='#n2350'>2350</a> <a id='n2351' href='#n2351'>2351</a> <a id='n2352' href='#n2352'>2352</a> <a id='n2353' href='#n2353'>2353</a> <a id='n2354' href='#n2354'>2354</a> <a id='n2355' href='#n2355'>2355</a> <a id='n2356' href='#n2356'>2356</a> <a id='n2357' href='#n2357'>2357</a> <a id='n2358' href='#n2358'>2358</a> <a id='n2359' href='#n2359'>2359</a> <a id='n2360' href='#n2360'>2360</a> <a id='n2361' href='#n2361'>2361</a> <a id='n2362' href='#n2362'>2362</a> <a id='n2363' href='#n2363'>2363</a> <a id='n2364' href='#n2364'>2364</a> <a id='n2365' href='#n2365'>2365</a> <a id='n2366' href='#n2366'>2366</a> <a id='n2367' href='#n2367'>2367</a> <a id='n2368' href='#n2368'>2368</a> <a id='n2369' href='#n2369'>2369</a> <a id='n2370' href='#n2370'>2370</a> <a id='n2371' href='#n2371'>2371</a> <a id='n2372' href='#n2372'>2372</a> <a id='n2373' href='#n2373'>2373</a> <a id='n2374' href='#n2374'>2374</a> <a id='n2375' href='#n2375'>2375</a> <a id='n2376' href='#n2376'>2376</a> <a id='n2377' href='#n2377'>2377</a> <a id='n2378' href='#n2378'>2378</a> <a id='n2379' href='#n2379'>2379</a> <a id='n2380' href='#n2380'>2380</a> <a id='n2381' href='#n2381'>2381</a> <a id='n2382' href='#n2382'>2382</a> <a id='n2383' href='#n2383'>2383</a> <a id='n2384' href='#n2384'>2384</a> <a id='n2385' href='#n2385'>2385</a> <a id='n2386' href='#n2386'>2386</a> <a id='n2387' href='#n2387'>2387</a> <a id='n2388' href='#n2388'>2388</a> <a id='n2389' href='#n2389'>2389</a> <a id='n2390' href='#n2390'>2390</a> <a id='n2391' href='#n2391'>2391</a> <a id='n2392' href='#n2392'>2392</a> <a id='n2393' href='#n2393'>2393</a> <a id='n2394' href='#n2394'>2394</a> <a id='n2395' href='#n2395'>2395</a> <a id='n2396' href='#n2396'>2396</a> <a id='n2397' href='#n2397'>2397</a> <a id='n2398' href='#n2398'>2398</a> <a id='n2399' href='#n2399'>2399</a> <a id='n2400' href='#n2400'>2400</a> <a id='n2401' href='#n2401'>2401</a> <a id='n2402' href='#n2402'>2402</a> <a id='n2403' href='#n2403'>2403</a> <a id='n2404' href='#n2404'>2404</a> <a id='n2405' href='#n2405'>2405</a> <a id='n2406' href='#n2406'>2406</a> <a id='n2407' href='#n2407'>2407</a> <a id='n2408' href='#n2408'>2408</a> <a id='n2409' href='#n2409'>2409</a> <a id='n2410' href='#n2410'>2410</a> <a id='n2411' href='#n2411'>2411</a> <a id='n2412' href='#n2412'>2412</a> <a id='n2413' href='#n2413'>2413</a> <a id='n2414' href='#n2414'>2414</a> <a id='n2415' href='#n2415'>2415</a> <a id='n2416' href='#n2416'>2416</a> <a id='n2417' href='#n2417'>2417</a> <a id='n2418' href='#n2418'>2418</a> <a id='n2419' href='#n2419'>2419</a> <a id='n2420' href='#n2420'>2420</a> <a id='n2421' href='#n2421'>2421</a> <a id='n2422' href='#n2422'>2422</a> <a id='n2423' href='#n2423'>2423</a> <a id='n2424' href='#n2424'>2424</a> <a id='n2425' href='#n2425'>2425</a> <a id='n2426' href='#n2426'>2426</a> <a id='n2427' href='#n2427'>2427</a> <a id='n2428' href='#n2428'>2428</a> <a id='n2429' href='#n2429'>2429</a> <a id='n2430' href='#n2430'>2430</a> <a id='n2431' href='#n2431'>2431</a> <a id='n2432' href='#n2432'>2432</a> <a id='n2433' href='#n2433'>2433</a> <a id='n2434' href='#n2434'>2434</a> <a id='n2435' href='#n2435'>2435</a> <a id='n2436' href='#n2436'>2436</a> <a id='n2437' href='#n2437'>2437</a> <a id='n2438' href='#n2438'>2438</a> <a id='n2439' href='#n2439'>2439</a> <a id='n2440' href='#n2440'>2440</a> <a id='n2441' href='#n2441'>2441</a> <a id='n2442' href='#n2442'>2442</a> <a id='n2443' href='#n2443'>2443</a> <a id='n2444' href='#n2444'>2444</a> <a id='n2445' href='#n2445'>2445</a> <a id='n2446' href='#n2446'>2446</a> <a id='n2447' href='#n2447'>2447</a> <a id='n2448' href='#n2448'>2448</a> <a id='n2449' href='#n2449'>2449</a> <a id='n2450' href='#n2450'>2450</a> <a id='n2451' href='#n2451'>2451</a> <a id='n2452' href='#n2452'>2452</a> <a id='n2453' href='#n2453'>2453</a> <a id='n2454' href='#n2454'>2454</a> <a id='n2455' href='#n2455'>2455</a> <a id='n2456' href='#n2456'>2456</a> <a id='n2457' href='#n2457'>2457</a> <a id='n2458' href='#n2458'>2458</a> <a id='n2459' href='#n2459'>2459</a> <a id='n2460' href='#n2460'>2460</a> <a id='n2461' href='#n2461'>2461</a> <a id='n2462' href='#n2462'>2462</a> <a id='n2463' href='#n2463'>2463</a> <a id='n2464' href='#n2464'>2464</a> <a id='n2465' href='#n2465'>2465</a> <a id='n2466' href='#n2466'>2466</a> <a id='n2467' href='#n2467'>2467</a> <a id='n2468' href='#n2468'>2468</a> <a id='n2469' href='#n2469'>2469</a> <a id='n2470' href='#n2470'>2470</a> <a id='n2471' href='#n2471'>2471</a> <a id='n2472' href='#n2472'>2472</a> <a id='n2473' href='#n2473'>2473</a> <a id='n2474' href='#n2474'>2474</a> <a id='n2475' href='#n2475'>2475</a> <a id='n2476' href='#n2476'>2476</a> <a id='n2477' href='#n2477'>2477</a> <a id='n2478' href='#n2478'>2478</a> <a id='n2479' href='#n2479'>2479</a> <a id='n2480' href='#n2480'>2480</a> <a id='n2481' href='#n2481'>2481</a> <a id='n2482' href='#n2482'>2482</a> <a id='n2483' href='#n2483'>2483</a> <a id='n2484' href='#n2484'>2484</a> <a id='n2485' href='#n2485'>2485</a> <a id='n2486' href='#n2486'>2486</a> <a id='n2487' href='#n2487'>2487</a> <a id='n2488' href='#n2488'>2488</a> <a id='n2489' href='#n2489'>2489</a> <a id='n2490' href='#n2490'>2490</a> <a id='n2491' href='#n2491'>2491</a> <a id='n2492' href='#n2492'>2492</a> <a id='n2493' href='#n2493'>2493</a> <a id='n2494' href='#n2494'>2494</a> <a id='n2495' href='#n2495'>2495</a> <a id='n2496' href='#n2496'>2496</a> <a id='n2497' href='#n2497'>2497</a> <a id='n2498' href='#n2498'>2498</a> <a id='n2499' href='#n2499'>2499</a> <a id='n2500' href='#n2500'>2500</a> <a id='n2501' href='#n2501'>2501</a> <a id='n2502' href='#n2502'>2502</a> <a id='n2503' href='#n2503'>2503</a> <a id='n2504' href='#n2504'>2504</a> <a id='n2505' href='#n2505'>2505</a> <a id='n2506' href='#n2506'>2506</a> <a id='n2507' href='#n2507'>2507</a> <a id='n2508' href='#n2508'>2508</a> <a id='n2509' href='#n2509'>2509</a> <a id='n2510' href='#n2510'>2510</a> <a id='n2511' href='#n2511'>2511</a> <a id='n2512' href='#n2512'>2512</a> <a id='n2513' href='#n2513'>2513</a> <a id='n2514' href='#n2514'>2514</a> <a id='n2515' href='#n2515'>2515</a> <a id='n2516' href='#n2516'>2516</a> <a id='n2517' href='#n2517'>2517</a> <a id='n2518' href='#n2518'>2518</a> <a id='n2519' href='#n2519'>2519</a> <a id='n2520' href='#n2520'>2520</a> <a id='n2521' href='#n2521'>2521</a> <a id='n2522' href='#n2522'>2522</a> <a id='n2523' href='#n2523'>2523</a> <a id='n2524' href='#n2524'>2524</a> <a id='n2525' href='#n2525'>2525</a> <a id='n2526' href='#n2526'>2526</a> <a id='n2527' href='#n2527'>2527</a> <a id='n2528' href='#n2528'>2528</a> <a id='n2529' href='#n2529'>2529</a> <a id='n2530' href='#n2530'>2530</a> <a id='n2531' href='#n2531'>2531</a> <a id='n2532' href='#n2532'>2532</a> <a id='n2533' href='#n2533'>2533</a> <a id='n2534' href='#n2534'>2534</a> <a id='n2535' href='#n2535'>2535</a> <a id='n2536' href='#n2536'>2536</a> <a id='n2537' href='#n2537'>2537</a> <a id='n2538' href='#n2538'>2538</a> <a id='n2539' href='#n2539'>2539</a> <a id='n2540' href='#n2540'>2540</a> <a id='n2541' href='#n2541'>2541</a> <a id='n2542' href='#n2542'>2542</a> <a id='n2543' href='#n2543'>2543</a> <a id='n2544' href='#n2544'>2544</a> <a id='n2545' href='#n2545'>2545</a> <a id='n2546' href='#n2546'>2546</a> <a id='n2547' href='#n2547'>2547</a> <a id='n2548' href='#n2548'>2548</a> <a id='n2549' href='#n2549'>2549</a> <a id='n2550' href='#n2550'>2550</a> <a id='n2551' href='#n2551'>2551</a> <a id='n2552' href='#n2552'>2552</a> <a id='n2553' href='#n2553'>2553</a> <a id='n2554' href='#n2554'>2554</a> <a id='n2555' href='#n2555'>2555</a> <a id='n2556' href='#n2556'>2556</a> <a id='n2557' href='#n2557'>2557</a> <a id='n2558' href='#n2558'>2558</a> <a id='n2559' href='#n2559'>2559</a> <a id='n2560' href='#n2560'>2560</a> <a id='n2561' href='#n2561'>2561</a> <a id='n2562' href='#n2562'>2562</a> <a id='n2563' href='#n2563'>2563</a> <a id='n2564' href='#n2564'>2564</a> <a id='n2565' href='#n2565'>2565</a> <a id='n2566' href='#n2566'>2566</a> <a id='n2567' href='#n2567'>2567</a> <a id='n2568' href='#n2568'>2568</a> <a id='n2569' href='#n2569'>2569</a> <a id='n2570' href='#n2570'>2570</a> <a id='n2571' href='#n2571'>2571</a> <a id='n2572' href='#n2572'>2572</a> <a id='n2573' href='#n2573'>2573</a> <a id='n2574' href='#n2574'>2574</a> <a id='n2575' href='#n2575'>2575</a> <a id='n2576' href='#n2576'>2576</a> <a id='n2577' href='#n2577'>2577</a> <a id='n2578' href='#n2578'>2578</a> <a id='n2579' href='#n2579'>2579</a> <a id='n2580' href='#n2580'>2580</a> <a id='n2581' href='#n2581'>2581</a> <a id='n2582' href='#n2582'>2582</a> <a id='n2583' href='#n2583'>2583</a> <a id='n2584' href='#n2584'>2584</a> <a id='n2585' href='#n2585'>2585</a> <a id='n2586' href='#n2586'>2586</a> <a id='n2587' href='#n2587'>2587</a> <a id='n2588' href='#n2588'>2588</a> <a id='n2589' href='#n2589'>2589</a> <a id='n2590' href='#n2590'>2590</a> <a id='n2591' href='#n2591'>2591</a> <a id='n2592' href='#n2592'>2592</a> <a id='n2593' href='#n2593'>2593</a> <a id='n2594' href='#n2594'>2594</a> <a id='n2595' href='#n2595'>2595</a> <a id='n2596' href='#n2596'>2596</a> <a id='n2597' href='#n2597'>2597</a> <a id='n2598' href='#n2598'>2598</a> <a id='n2599' href='#n2599'>2599</a> <a id='n2600' href='#n2600'>2600</a> <a id='n2601' href='#n2601'>2601</a> <a id='n2602' href='#n2602'>2602</a> <a id='n2603' href='#n2603'>2603</a> <a id='n2604' href='#n2604'>2604</a> <a id='n2605' href='#n2605'>2605</a> <a id='n2606' href='#n2606'>2606</a> <a id='n2607' href='#n2607'>2607</a> <a id='n2608' href='#n2608'>2608</a> <a id='n2609' href='#n2609'>2609</a> <a id='n2610' href='#n2610'>2610</a> <a id='n2611' href='#n2611'>2611</a> <a id='n2612' href='#n2612'>2612</a> <a id='n2613' href='#n2613'>2613</a> <a id='n2614' href='#n2614'>2614</a> <a id='n2615' href='#n2615'>2615</a> <a id='n2616' href='#n2616'>2616</a> <a id='n2617' href='#n2617'>2617</a> <a id='n2618' href='#n2618'>2618</a> <a id='n2619' href='#n2619'>2619</a> <a id='n2620' href='#n2620'>2620</a> <a id='n2621' href='#n2621'>2621</a> <a id='n2622' href='#n2622'>2622</a> <a id='n2623' href='#n2623'>2623</a> <a id='n2624' href='#n2624'>2624</a> <a id='n2625' href='#n2625'>2625</a> <a id='n2626' href='#n2626'>2626</a> <a id='n2627' href='#n2627'>2627</a> <a id='n2628' href='#n2628'>2628</a> <a id='n2629' href='#n2629'>2629</a> <a id='n2630' href='#n2630'>2630</a> <a id='n2631' href='#n2631'>2631</a> <a id='n2632' href='#n2632'>2632</a> <a id='n2633' href='#n2633'>2633</a> <a id='n2634' href='#n2634'>2634</a> <a id='n2635' href='#n2635'>2635</a> <a id='n2636' href='#n2636'>2636</a> <a id='n2637' href='#n2637'>2637</a> <a id='n2638' href='#n2638'>2638</a> <a id='n2639' href='#n2639'>2639</a> <a id='n2640' href='#n2640'>2640</a> <a id='n2641' href='#n2641'>2641</a> <a id='n2642' href='#n2642'>2642</a> <a id='n2643' href='#n2643'>2643</a> <a id='n2644' href='#n2644'>2644</a> <a id='n2645' href='#n2645'>2645</a> <a id='n2646' href='#n2646'>2646</a> <a id='n2647' href='#n2647'>2647</a> <a id='n2648' href='#n2648'>2648</a> <a id='n2649' href='#n2649'>2649</a> <a id='n2650' href='#n2650'>2650</a> <a id='n2651' href='#n2651'>2651</a> <a id='n2652' href='#n2652'>2652</a> <a id='n2653' href='#n2653'>2653</a> <a id='n2654' href='#n2654'>2654</a> <a id='n2655' href='#n2655'>2655</a> <a id='n2656' href='#n2656'>2656</a> <a id='n2657' href='#n2657'>2657</a> <a id='n2658' href='#n2658'>2658</a> <a id='n2659' href='#n2659'>2659</a> <a id='n2660' href='#n2660'>2660</a> <a id='n2661' href='#n2661'>2661</a> <a id='n2662' href='#n2662'>2662</a> <a id='n2663' href='#n2663'>2663</a> <a id='n2664' href='#n2664'>2664</a> <a id='n2665' href='#n2665'>2665</a> <a id='n2666' href='#n2666'>2666</a> <a id='n2667' href='#n2667'>2667</a> <a id='n2668' href='#n2668'>2668</a> <a id='n2669' href='#n2669'>2669</a> <a id='n2670' href='#n2670'>2670</a> <a id='n2671' href='#n2671'>2671</a> <a id='n2672' href='#n2672'>2672</a> <a id='n2673' href='#n2673'>2673</a> <a id='n2674' href='#n2674'>2674</a> <a id='n2675' href='#n2675'>2675</a> <a id='n2676' href='#n2676'>2676</a> <a id='n2677' href='#n2677'>2677</a> <a id='n2678' href='#n2678'>2678</a> <a id='n2679' href='#n2679'>2679</a> <a id='n2680' href='#n2680'>2680</a> <a id='n2681' href='#n2681'>2681</a> <a id='n2682' href='#n2682'>2682</a> <a id='n2683' href='#n2683'>2683</a> <a id='n2684' href='#n2684'>2684</a> <a id='n2685' href='#n2685'>2685</a> <a id='n2686' href='#n2686'>2686</a> <a id='n2687' href='#n2687'>2687</a> <a id='n2688' href='#n2688'>2688</a> <a id='n2689' href='#n2689'>2689</a> <a id='n2690' href='#n2690'>2690</a> <a id='n2691' href='#n2691'>2691</a> <a id='n2692' href='#n2692'>2692</a> <a id='n2693' href='#n2693'>2693</a> <a id='n2694' href='#n2694'>2694</a> <a id='n2695' href='#n2695'>2695</a> <a id='n2696' href='#n2696'>2696</a> <a id='n2697' href='#n2697'>2697</a> <a id='n2698' href='#n2698'>2698</a> <a id='n2699' href='#n2699'>2699</a> <a id='n2700' href='#n2700'>2700</a> <a id='n2701' href='#n2701'>2701</a> <a id='n2702' href='#n2702'>2702</a> <a id='n2703' href='#n2703'>2703</a> <a id='n2704' href='#n2704'>2704</a> <a id='n2705' href='#n2705'>2705</a> <a id='n2706' href='#n2706'>2706</a> <a id='n2707' href='#n2707'>2707</a> <a id='n2708' href='#n2708'>2708</a> <a id='n2709' href='#n2709'>2709</a> <a id='n2710' href='#n2710'>2710</a> <a id='n2711' href='#n2711'>2711</a> <a id='n2712' href='#n2712'>2712</a> <a id='n2713' href='#n2713'>2713</a> <a id='n2714' href='#n2714'>2714</a> <a id='n2715' href='#n2715'>2715</a> <a id='n2716' href='#n2716'>2716</a> <a id='n2717' href='#n2717'>2717</a> <a id='n2718' href='#n2718'>2718</a> <a id='n2719' href='#n2719'>2719</a> <a id='n2720' href='#n2720'>2720</a> <a id='n2721' href='#n2721'>2721</a> <a id='n2722' href='#n2722'>2722</a> <a id='n2723' href='#n2723'>2723</a> <a id='n2724' href='#n2724'>2724</a> <a id='n2725' href='#n2725'>2725</a> <a id='n2726' href='#n2726'>2726</a> <a id='n2727' href='#n2727'>2727</a> <a id='n2728' href='#n2728'>2728</a> <a id='n2729' href='#n2729'>2729</a> <a id='n2730' href='#n2730'>2730</a> <a id='n2731' href='#n2731'>2731</a> <a id='n2732' href='#n2732'>2732</a> <a id='n2733' href='#n2733'>2733</a> <a id='n2734' href='#n2734'>2734</a> <a id='n2735' href='#n2735'>2735</a> <a id='n2736' href='#n2736'>2736</a> <a id='n2737' href='#n2737'>2737</a> <a id='n2738' href='#n2738'>2738</a> <a id='n2739' href='#n2739'>2739</a> <a id='n2740' href='#n2740'>2740</a> <a id='n2741' href='#n2741'>2741</a> <a id='n2742' href='#n2742'>2742</a> <a id='n2743' href='#n2743'>2743</a> <a id='n2744' href='#n2744'>2744</a> <a id='n2745' href='#n2745'>2745</a> <a id='n2746' href='#n2746'>2746</a> <a id='n2747' href='#n2747'>2747</a> <a id='n2748' href='#n2748'>2748</a> <a id='n2749' href='#n2749'>2749</a> <a id='n2750' href='#n2750'>2750</a> <a id='n2751' href='#n2751'>2751</a> <a id='n2752' href='#n2752'>2752</a> <a id='n2753' href='#n2753'>2753</a> <a id='n2754' href='#n2754'>2754</a> <a id='n2755' href='#n2755'>2755</a> <a id='n2756' href='#n2756'>2756</a> <a id='n2757' href='#n2757'>2757</a> <a id='n2758' href='#n2758'>2758</a> <a id='n2759' href='#n2759'>2759</a> <a id='n2760' href='#n2760'>2760</a> <a id='n2761' href='#n2761'>2761</a> <a id='n2762' href='#n2762'>2762</a> <a id='n2763' href='#n2763'>2763</a> <a id='n2764' href='#n2764'>2764</a> <a id='n2765' href='#n2765'>2765</a> <a id='n2766' href='#n2766'>2766</a> <a id='n2767' href='#n2767'>2767</a> <a id='n2768' href='#n2768'>2768</a> <a id='n2769' href='#n2769'>2769</a> <a id='n2770' href='#n2770'>2770</a> <a id='n2771' href='#n2771'>2771</a> <a id='n2772' href='#n2772'>2772</a> <a id='n2773' href='#n2773'>2773</a> <a id='n2774' href='#n2774'>2774</a> <a id='n2775' href='#n2775'>2775</a> <a id='n2776' href='#n2776'>2776</a> <a id='n2777' href='#n2777'>2777</a> <a id='n2778' href='#n2778'>2778</a> <a id='n2779' href='#n2779'>2779</a> <a id='n2780' href='#n2780'>2780</a> <a id='n2781' href='#n2781'>2781</a> <a id='n2782' href='#n2782'>2782</a> <a id='n2783' href='#n2783'>2783</a> <a id='n2784' href='#n2784'>2784</a> <a id='n2785' href='#n2785'>2785</a> <a id='n2786' href='#n2786'>2786</a> <a id='n2787' href='#n2787'>2787</a> <a id='n2788' href='#n2788'>2788</a> <a id='n2789' href='#n2789'>2789</a> <a id='n2790' href='#n2790'>2790</a> <a id='n2791' href='#n2791'>2791</a> <a id='n2792' href='#n2792'>2792</a> <a id='n2793' href='#n2793'>2793</a> <a id='n2794' href='#n2794'>2794</a> <a id='n2795' href='#n2795'>2795</a> <a id='n2796' href='#n2796'>2796</a> <a id='n2797' href='#n2797'>2797</a> <a id='n2798' href='#n2798'>2798</a> <a id='n2799' href='#n2799'>2799</a> <a id='n2800' href='#n2800'>2800</a> <a id='n2801' href='#n2801'>2801</a> <a id='n2802' href='#n2802'>2802</a> <a id='n2803' href='#n2803'>2803</a> <a id='n2804' href='#n2804'>2804</a> <a id='n2805' href='#n2805'>2805</a> <a id='n2806' href='#n2806'>2806</a> <a id='n2807' href='#n2807'>2807</a> <a id='n2808' href='#n2808'>2808</a> <a id='n2809' href='#n2809'>2809</a> <a id='n2810' href='#n2810'>2810</a> <a id='n2811' href='#n2811'>2811</a> <a id='n2812' href='#n2812'>2812</a> <a id='n2813' href='#n2813'>2813</a> <a id='n2814' href='#n2814'>2814</a> <a id='n2815' href='#n2815'>2815</a> <a id='n2816' href='#n2816'>2816</a> <a id='n2817' href='#n2817'>2817</a> <a id='n2818' href='#n2818'>2818</a> <a id='n2819' href='#n2819'>2819</a> <a id='n2820' href='#n2820'>2820</a> <a id='n2821' href='#n2821'>2821</a> <a id='n2822' href='#n2822'>2822</a> <a id='n2823' href='#n2823'>2823</a> <a id='n2824' href='#n2824'>2824</a> <a id='n2825' href='#n2825'>2825</a> <a id='n2826' href='#n2826'>2826</a> <a id='n2827' href='#n2827'>2827</a> <a id='n2828' href='#n2828'>2828</a> <a id='n2829' href='#n2829'>2829</a> <a id='n2830' href='#n2830'>2830</a> <a id='n2831' href='#n2831'>2831</a> <a id='n2832' href='#n2832'>2832</a> <a id='n2833' href='#n2833'>2833</a> <a id='n2834' href='#n2834'>2834</a> <a id='n2835' href='#n2835'>2835</a> <a id='n2836' href='#n2836'>2836</a> <a id='n2837' href='#n2837'>2837</a> <a id='n2838' href='#n2838'>2838</a> <a id='n2839' href='#n2839'>2839</a> <a id='n2840' href='#n2840'>2840</a> <a id='n2841' href='#n2841'>2841</a> <a id='n2842' href='#n2842'>2842</a> <a id='n2843' href='#n2843'>2843</a> <a id='n2844' href='#n2844'>2844</a> <a id='n2845' href='#n2845'>2845</a> <a id='n2846' href='#n2846'>2846</a> <a id='n2847' href='#n2847'>2847</a> <a id='n2848' href='#n2848'>2848</a> <a id='n2849' href='#n2849'>2849</a> <a id='n2850' href='#n2850'>2850</a> <a id='n2851' href='#n2851'>2851</a> <a id='n2852' href='#n2852'>2852</a> <a id='n2853' href='#n2853'>2853</a> <a id='n2854' href='#n2854'>2854</a> <a id='n2855' href='#n2855'>2855</a> <a id='n2856' href='#n2856'>2856</a> <a id='n2857' href='#n2857'>2857</a> <a id='n2858' href='#n2858'>2858</a> <a id='n2859' href='#n2859'>2859</a> <a id='n2860' href='#n2860'>2860</a> <a id='n2861' href='#n2861'>2861</a> <a id='n2862' href='#n2862'>2862</a> <a id='n2863' href='#n2863'>2863</a> <a id='n2864' href='#n2864'>2864</a> <a id='n2865' href='#n2865'>2865</a> <a id='n2866' href='#n2866'>2866</a> <a id='n2867' href='#n2867'>2867</a> <a id='n2868' href='#n2868'>2868</a> <a id='n2869' href='#n2869'>2869</a> <a id='n2870' href='#n2870'>2870</a> <a id='n2871' href='#n2871'>2871</a> <a id='n2872' href='#n2872'>2872</a> <a id='n2873' href='#n2873'>2873</a> <a id='n2874' href='#n2874'>2874</a> <a id='n2875' href='#n2875'>2875</a> <a id='n2876' href='#n2876'>2876</a> <a id='n2877' href='#n2877'>2877</a> <a id='n2878' href='#n2878'>2878</a> <a id='n2879' href='#n2879'>2879</a> <a id='n2880' href='#n2880'>2880</a> <a id='n2881' href='#n2881'>2881</a> <a id='n2882' href='#n2882'>2882</a> <a id='n2883' href='#n2883'>2883</a> <a id='n2884' href='#n2884'>2884</a> <a id='n2885' href='#n2885'>2885</a> <a id='n2886' href='#n2886'>2886</a> <a id='n2887' href='#n2887'>2887</a> <a id='n2888' href='#n2888'>2888</a> <a id='n2889' href='#n2889'>2889</a> <a id='n2890' href='#n2890'>2890</a> <a id='n2891' href='#n2891'>2891</a> <a id='n2892' href='#n2892'>2892</a> <a id='n2893' href='#n2893'>2893</a> <a id='n2894' href='#n2894'>2894</a> <a id='n2895' href='#n2895'>2895</a> <a id='n2896' href='#n2896'>2896</a> <a id='n2897' href='#n2897'>2897</a> <a id='n2898' href='#n2898'>2898</a> <a id='n2899' href='#n2899'>2899</a> <a id='n2900' href='#n2900'>2900</a> <a id='n2901' href='#n2901'>2901</a> <a id='n2902' href='#n2902'>2902</a> <a id='n2903' href='#n2903'>2903</a> <a id='n2904' href='#n2904'>2904</a> <a id='n2905' href='#n2905'>2905</a> <a id='n2906' href='#n2906'>2906</a> <a id='n2907' href='#n2907'>2907</a> <a id='n2908' href='#n2908'>2908</a> <a id='n2909' href='#n2909'>2909</a> <a id='n2910' href='#n2910'>2910</a> <a id='n2911' href='#n2911'>2911</a> <a id='n2912' href='#n2912'>2912</a> <a id='n2913' href='#n2913'>2913</a> <a id='n2914' href='#n2914'>2914</a> <a id='n2915' href='#n2915'>2915</a> <a id='n2916' href='#n2916'>2916</a> <a id='n2917' href='#n2917'>2917</a> <a id='n2918' href='#n2918'>2918</a> <a id='n2919' href='#n2919'>2919</a> <a id='n2920' href='#n2920'>2920</a> <a id='n2921' href='#n2921'>2921</a> <a id='n2922' href='#n2922'>2922</a> <a id='n2923' href='#n2923'>2923</a> <a id='n2924' href='#n2924'>2924</a> <a id='n2925' href='#n2925'>2925</a> <a id='n2926' href='#n2926'>2926</a> <a id='n2927' href='#n2927'>2927</a> <a id='n2928' href='#n2928'>2928</a> <a id='n2929' href='#n2929'>2929</a> <a id='n2930' href='#n2930'>2930</a> <a id='n2931' href='#n2931'>2931</a> <a id='n2932' href='#n2932'>2932</a> <a id='n2933' href='#n2933'>2933</a> <a id='n2934' href='#n2934'>2934</a> <a id='n2935' href='#n2935'>2935</a> <a id='n2936' href='#n2936'>2936</a> <a id='n2937' href='#n2937'>2937</a> <a id='n2938' href='#n2938'>2938</a> <a id='n2939' href='#n2939'>2939</a> <a id='n2940' href='#n2940'>2940</a> <a id='n2941' href='#n2941'>2941</a> <a id='n2942' href='#n2942'>2942</a> <a id='n2943' href='#n2943'>2943</a> <a id='n2944' href='#n2944'>2944</a> <a id='n2945' href='#n2945'>2945</a> <a id='n2946' href='#n2946'>2946</a> <a id='n2947' href='#n2947'>2947</a> <a id='n2948' href='#n2948'>2948</a> <a id='n2949' href='#n2949'>2949</a> <a id='n2950' href='#n2950'>2950</a> <a id='n2951' href='#n2951'>2951</a> <a id='n2952' href='#n2952'>2952</a> <a id='n2953' href='#n2953'>2953</a> <a id='n2954' href='#n2954'>2954</a> <a id='n2955' href='#n2955'>2955</a> <a id='n2956' href='#n2956'>2956</a> <a id='n2957' href='#n2957'>2957</a> <a id='n2958' href='#n2958'>2958</a> <a id='n2959' href='#n2959'>2959</a> <a id='n2960' href='#n2960'>2960</a> <a id='n2961' href='#n2961'>2961</a> <a id='n2962' href='#n2962'>2962</a> <a id='n2963' href='#n2963'>2963</a> <a id='n2964' href='#n2964'>2964</a> <a id='n2965' href='#n2965'>2965</a> <a id='n2966' href='#n2966'>2966</a> <a id='n2967' href='#n2967'>2967</a> <a id='n2968' href='#n2968'>2968</a> <a id='n2969' href='#n2969'>2969</a> <a id='n2970' href='#n2970'>2970</a> <a id='n2971' href='#n2971'>2971</a> <a id='n2972' href='#n2972'>2972</a> <a id='n2973' href='#n2973'>2973</a> <a id='n2974' href='#n2974'>2974</a> <a id='n2975' href='#n2975'>2975</a> <a id='n2976' href='#n2976'>2976</a> <a id='n2977' href='#n2977'>2977</a> <a id='n2978' href='#n2978'>2978</a> <a id='n2979' href='#n2979'>2979</a> <a id='n2980' href='#n2980'>2980</a> <a id='n2981' href='#n2981'>2981</a> <a id='n2982' href='#n2982'>2982</a> <a id='n2983' href='#n2983'>2983</a> <a id='n2984' href='#n2984'>2984</a> <a id='n2985' href='#n2985'>2985</a> <a id='n2986' href='#n2986'>2986</a> <a id='n2987' href='#n2987'>2987</a> <a id='n2988' href='#n2988'>2988</a> <a id='n2989' href='#n2989'>2989</a> <a id='n2990' href='#n2990'>2990</a> <a id='n2991' href='#n2991'>2991</a> <a id='n2992' href='#n2992'>2992</a> <a id='n2993' href='#n2993'>2993</a> <a id='n2994' href='#n2994'>2994</a> <a id='n2995' href='#n2995'>2995</a> <a id='n2996' href='#n2996'>2996</a> <a id='n2997' href='#n2997'>2997</a> <a id='n2998' href='#n2998'>2998</a> <a id='n2999' href='#n2999'>2999</a> <a id='n3000' href='#n3000'>3000</a> <a id='n3001' href='#n3001'>3001</a> <a id='n3002' href='#n3002'>3002</a> <a id='n3003' href='#n3003'>3003</a> <a id='n3004' href='#n3004'>3004</a> <a id='n3005' href='#n3005'>3005</a> <a id='n3006' href='#n3006'>3006</a> <a id='n3007' href='#n3007'>3007</a> <a id='n3008' href='#n3008'>3008</a> <a id='n3009' href='#n3009'>3009</a> <a id='n3010' href='#n3010'>3010</a> <a id='n3011' href='#n3011'>3011</a> <a id='n3012' href='#n3012'>3012</a> <a id='n3013' href='#n3013'>3013</a> <a id='n3014' href='#n3014'>3014</a> <a id='n3015' href='#n3015'>3015</a> <a id='n3016' href='#n3016'>3016</a> <a id='n3017' href='#n3017'>3017</a> <a id='n3018' href='#n3018'>3018</a> <a id='n3019' href='#n3019'>3019</a> <a id='n3020' href='#n3020'>3020</a> <a id='n3021' href='#n3021'>3021</a> <a id='n3022' href='#n3022'>3022</a> <a id='n3023' href='#n3023'>3023</a> <a id='n3024' href='#n3024'>3024</a> <a id='n3025' href='#n3025'>3025</a> <a id='n3026' href='#n3026'>3026</a> <a id='n3027' href='#n3027'>3027</a> <a id='n3028' href='#n3028'>3028</a> <a id='n3029' href='#n3029'>3029</a> <a id='n3030' href='#n3030'>3030</a> <a id='n3031' href='#n3031'>3031</a> <a id='n3032' href='#n3032'>3032</a> <a id='n3033' href='#n3033'>3033</a> <a id='n3034' href='#n3034'>3034</a> <a id='n3035' href='#n3035'>3035</a> <a id='n3036' href='#n3036'>3036</a> <a id='n3037' href='#n3037'>3037</a> <a id='n3038' href='#n3038'>3038</a> <a id='n3039' href='#n3039'>3039</a> <a id='n3040' href='#n3040'>3040</a> <a id='n3041' href='#n3041'>3041</a> <a id='n3042' href='#n3042'>3042</a> <a id='n3043' href='#n3043'>3043</a> <a id='n3044' href='#n3044'>3044</a> <a id='n3045' href='#n3045'>3045</a> <a id='n3046' href='#n3046'>3046</a> <a id='n3047' href='#n3047'>3047</a> <a id='n3048' href='#n3048'>3048</a> <a id='n3049' href='#n3049'>3049</a> <a id='n3050' href='#n3050'>3050</a> <a id='n3051' href='#n3051'>3051</a> <a id='n3052' href='#n3052'>3052</a> <a id='n3053' href='#n3053'>3053</a> <a id='n3054' href='#n3054'>3054</a> <a id='n3055' href='#n3055'>3055</a> <a id='n3056' href='#n3056'>3056</a> <a id='n3057' href='#n3057'>3057</a> <a id='n3058' href='#n3058'>3058</a> <a id='n3059' href='#n3059'>3059</a> <a id='n3060' href='#n3060'>3060</a> <a id='n3061' href='#n3061'>3061</a> <a id='n3062' href='#n3062'>3062</a> <a id='n3063' href='#n3063'>3063</a> <a id='n3064' href='#n3064'>3064</a> <a id='n3065' href='#n3065'>3065</a> <a id='n3066' href='#n3066'>3066</a> <a id='n3067' href='#n3067'>3067</a> <a id='n3068' href='#n3068'>3068</a> <a id='n3069' href='#n3069'>3069</a> <a id='n3070' href='#n3070'>3070</a> <a id='n3071' href='#n3071'>3071</a> <a id='n3072' href='#n3072'>3072</a> <a id='n3073' href='#n3073'>3073</a> <a id='n3074' href='#n3074'>3074</a> <a id='n3075' href='#n3075'>3075</a> <a id='n3076' href='#n3076'>3076</a> <a id='n3077' href='#n3077'>3077</a> <a id='n3078' href='#n3078'>3078</a> <a id='n3079' href='#n3079'>3079</a> <a id='n3080' href='#n3080'>3080</a> <a id='n3081' href='#n3081'>3081</a> <a id='n3082' href='#n3082'>3082</a> <a id='n3083' href='#n3083'>3083</a> <a id='n3084' href='#n3084'>3084</a> <a id='n3085' href='#n3085'>3085</a> <a id='n3086' href='#n3086'>3086</a> <a id='n3087' href='#n3087'>3087</a> <a id='n3088' href='#n3088'>3088</a> <a id='n3089' href='#n3089'>3089</a> <a id='n3090' href='#n3090'>3090</a> <a id='n3091' href='#n3091'>3091</a> <a id='n3092' href='#n3092'>3092</a> <a id='n3093' href='#n3093'>3093</a> <a id='n3094' href='#n3094'>3094</a> <a id='n3095' href='#n3095'>3095</a> <a id='n3096' href='#n3096'>3096</a> <a id='n3097' href='#n3097'>3097</a> <a id='n3098' href='#n3098'>3098</a> <a id='n3099' href='#n3099'>3099</a> <a id='n3100' href='#n3100'>3100</a> <a id='n3101' href='#n3101'>3101</a> <a id='n3102' href='#n3102'>3102</a> <a id='n3103' href='#n3103'>3103</a> <a id='n3104' href='#n3104'>3104</a> <a id='n3105' href='#n3105'>3105</a> <a id='n3106' href='#n3106'>3106</a> <a id='n3107' href='#n3107'>3107</a> <a id='n3108' href='#n3108'>3108</a> <a id='n3109' href='#n3109'>3109</a> <a id='n3110' href='#n3110'>3110</a> <a id='n3111' href='#n3111'>3111</a> <a id='n3112' href='#n3112'>3112</a> <a id='n3113' href='#n3113'>3113</a> <a id='n3114' href='#n3114'>3114</a> <a id='n3115' href='#n3115'>3115</a> <a id='n3116' href='#n3116'>3116</a> <a id='n3117' href='#n3117'>3117</a> <a id='n3118' href='#n3118'>3118</a> <a id='n3119' href='#n3119'>3119</a> <a id='n3120' href='#n3120'>3120</a> <a id='n3121' href='#n3121'>3121</a> <a id='n3122' href='#n3122'>3122</a> <a id='n3123' href='#n3123'>3123</a> <a id='n3124' href='#n3124'>3124</a> <a id='n3125' href='#n3125'>3125</a> <a id='n3126' href='#n3126'>3126</a> <a id='n3127' href='#n3127'>3127</a> <a id='n3128' href='#n3128'>3128</a> <a id='n3129' href='#n3129'>3129</a> <a id='n3130' href='#n3130'>3130</a> <a id='n3131' href='#n3131'>3131</a> <a id='n3132' href='#n3132'>3132</a> <a id='n3133' href='#n3133'>3133</a> <a id='n3134' href='#n3134'>3134</a> <a id='n3135' href='#n3135'>3135</a> <a id='n3136' href='#n3136'>3136</a> <a id='n3137' href='#n3137'>3137</a> <a id='n3138' href='#n3138'>3138</a> <a id='n3139' href='#n3139'>3139</a> <a id='n3140' href='#n3140'>3140</a> <a id='n3141' href='#n3141'>3141</a> <a id='n3142' href='#n3142'>3142</a> <a id='n3143' href='#n3143'>3143</a> <a id='n3144' href='#n3144'>3144</a> <a id='n3145' href='#n3145'>3145</a> <a id='n3146' href='#n3146'>3146</a> <a id='n3147' href='#n3147'>3147</a> <a id='n3148' href='#n3148'>3148</a> <a id='n3149' href='#n3149'>3149</a> <a id='n3150' href='#n3150'>3150</a> <a id='n3151' href='#n3151'>3151</a> <a id='n3152' href='#n3152'>3152</a> <a id='n3153' href='#n3153'>3153</a> <a id='n3154' href='#n3154'>3154</a> <a id='n3155' href='#n3155'>3155</a> <a id='n3156' href='#n3156'>3156</a> <a id='n3157' href='#n3157'>3157</a> <a id='n3158' href='#n3158'>3158</a> <a id='n3159' href='#n3159'>3159</a> <a id='n3160' href='#n3160'>3160</a> <a id='n3161' href='#n3161'>3161</a> <a id='n3162' href='#n3162'>3162</a> <a id='n3163' href='#n3163'>3163</a> <a id='n3164' href='#n3164'>3164</a> <a id='n3165' href='#n3165'>3165</a> <a id='n3166' href='#n3166'>3166</a> <a id='n3167' href='#n3167'>3167</a> <a id='n3168' href='#n3168'>3168</a> <a id='n3169' href='#n3169'>3169</a> <a id='n3170' href='#n3170'>3170</a> <a id='n3171' href='#n3171'>3171</a> <a id='n3172' href='#n3172'>3172</a> <a id='n3173' href='#n3173'>3173</a> <a id='n3174' href='#n3174'>3174</a> <a id='n3175' href='#n3175'>3175</a> <a id='n3176' href='#n3176'>3176</a> <a id='n3177' href='#n3177'>3177</a> <a id='n3178' href='#n3178'>3178</a> <a id='n3179' href='#n3179'>3179</a> <a id='n3180' href='#n3180'>3180</a> <a id='n3181' href='#n3181'>3181</a> <a id='n3182' href='#n3182'>3182</a> <a id='n3183' href='#n3183'>3183</a> <a id='n3184' href='#n3184'>3184</a> <a id='n3185' href='#n3185'>3185</a> <a id='n3186' href='#n3186'>3186</a> <a id='n3187' href='#n3187'>3187</a> <a id='n3188' href='#n3188'>3188</a> <a id='n3189' href='#n3189'>3189</a> <a id='n3190' href='#n3190'>3190</a> <a id='n3191' href='#n3191'>3191</a> <a id='n3192' href='#n3192'>3192</a> <a id='n3193' href='#n3193'>3193</a> <a id='n3194' href='#n3194'>3194</a> <a id='n3195' href='#n3195'>3195</a> <a id='n3196' href='#n3196'>3196</a> <a id='n3197' href='#n3197'>3197</a> <a id='n3198' href='#n3198'>3198</a> <a id='n3199' href='#n3199'>3199</a> <a id='n3200' href='#n3200'>3200</a> <a id='n3201' href='#n3201'>3201</a> <a id='n3202' href='#n3202'>3202</a> <a id='n3203' href='#n3203'>3203</a> <a id='n3204' href='#n3204'>3204</a> <a id='n3205' href='#n3205'>3205</a> <a id='n3206' href='#n3206'>3206</a> <a id='n3207' href='#n3207'>3207</a> <a id='n3208' href='#n3208'>3208</a> <a id='n3209' href='#n3209'>3209</a> <a id='n3210' href='#n3210'>3210</a> <a id='n3211' href='#n3211'>3211</a> <a id='n3212' href='#n3212'>3212</a> <a id='n3213' href='#n3213'>3213</a> <a id='n3214' href='#n3214'>3214</a> <a id='n3215' href='#n3215'>3215</a> <a id='n3216' href='#n3216'>3216</a> <a id='n3217' href='#n3217'>3217</a> <a id='n3218' href='#n3218'>3218</a> <a id='n3219' href='#n3219'>3219</a> <a id='n3220' href='#n3220'>3220</a> <a id='n3221' href='#n3221'>3221</a> <a id='n3222' href='#n3222'>3222</a> <a id='n3223' href='#n3223'>3223</a> <a id='n3224' href='#n3224'>3224</a> <a id='n3225' href='#n3225'>3225</a> <a id='n3226' href='#n3226'>3226</a> <a id='n3227' href='#n3227'>3227</a> <a id='n3228' href='#n3228'>3228</a> <a id='n3229' href='#n3229'>3229</a> <a id='n3230' href='#n3230'>3230</a> <a id='n3231' href='#n3231'>3231</a> <a id='n3232' href='#n3232'>3232</a> <a id='n3233' href='#n3233'>3233</a> <a id='n3234' href='#n3234'>3234</a> <a id='n3235' href='#n3235'>3235</a> <a id='n3236' href='#n3236'>3236</a> <a id='n3237' href='#n3237'>3237</a> <a id='n3238' href='#n3238'>3238</a> <a id='n3239' href='#n3239'>3239</a> <a id='n3240' href='#n3240'>3240</a> <a id='n3241' href='#n3241'>3241</a> <a id='n3242' href='#n3242'>3242</a> <a id='n3243' href='#n3243'>3243</a> <a id='n3244' href='#n3244'>3244</a> <a id='n3245' href='#n3245'>3245</a> <a id='n3246' href='#n3246'>3246</a> <a id='n3247' href='#n3247'>3247</a> <a id='n3248' href='#n3248'>3248</a> <a id='n3249' href='#n3249'>3249</a> <a id='n3250' href='#n3250'>3250</a> <a id='n3251' href='#n3251'>3251</a> <a id='n3252' href='#n3252'>3252</a> <a id='n3253' href='#n3253'>3253</a> <a id='n3254' href='#n3254'>3254</a> <a id='n3255' href='#n3255'>3255</a> <a id='n3256' href='#n3256'>3256</a> <a id='n3257' href='#n3257'>3257</a> <a id='n3258' href='#n3258'>3258</a> <a id='n3259' href='#n3259'>3259</a> <a id='n3260' href='#n3260'>3260</a> <a id='n3261' href='#n3261'>3261</a> <a id='n3262' href='#n3262'>3262</a> <a id='n3263' href='#n3263'>3263</a> <a id='n3264' href='#n3264'>3264</a> <a id='n3265' href='#n3265'>3265</a> <a id='n3266' href='#n3266'>3266</a> <a id='n3267' href='#n3267'>3267</a> <a id='n3268' href='#n3268'>3268</a> <a id='n3269' href='#n3269'>3269</a> <a id='n3270' href='#n3270'>3270</a> <a id='n3271' href='#n3271'>3271</a> <a id='n3272' href='#n3272'>3272</a> <a id='n3273' href='#n3273'>3273</a> <a id='n3274' href='#n3274'>3274</a> <a id='n3275' href='#n3275'>3275</a> <a id='n3276' href='#n3276'>3276</a> <a id='n3277' href='#n3277'>3277</a> <a id='n3278' href='#n3278'>3278</a> <a id='n3279' href='#n3279'>3279</a> <a id='n3280' href='#n3280'>3280</a> <a id='n3281' href='#n3281'>3281</a> <a id='n3282' href='#n3282'>3282</a> <a id='n3283' href='#n3283'>3283</a> <a id='n3284' href='#n3284'>3284</a> <a id='n3285' href='#n3285'>3285</a> <a id='n3286' href='#n3286'>3286</a> <a id='n3287' href='#n3287'>3287</a> <a id='n3288' href='#n3288'>3288</a> <a id='n3289' href='#n3289'>3289</a> <a id='n3290' href='#n3290'>3290</a> <a id='n3291' href='#n3291'>3291</a> <a id='n3292' href='#n3292'>3292</a> <a id='n3293' href='#n3293'>3293</a> <a id='n3294' href='#n3294'>3294</a> <a id='n3295' href='#n3295'>3295</a> <a id='n3296' href='#n3296'>3296</a> <a id='n3297' href='#n3297'>3297</a> <a id='n3298' href='#n3298'>3298</a> <a id='n3299' href='#n3299'>3299</a> <a id='n3300' href='#n3300'>3300</a> <a id='n3301' href='#n3301'>3301</a> <a id='n3302' href='#n3302'>3302</a> <a id='n3303' href='#n3303'>3303</a> <a id='n3304' href='#n3304'>3304</a> <a id='n3305' href='#n3305'>3305</a> <a id='n3306' href='#n3306'>3306</a> <a id='n3307' href='#n3307'>3307</a> <a id='n3308' href='#n3308'>3308</a> <a id='n3309' href='#n3309'>3309</a> <a id='n3310' href='#n3310'>3310</a> <a id='n3311' href='#n3311'>3311</a> <a id='n3312' href='#n3312'>3312</a> <a id='n3313' href='#n3313'>3313</a> <a id='n3314' href='#n3314'>3314</a> <a id='n3315' href='#n3315'>3315</a> <a id='n3316' href='#n3316'>3316</a> <a id='n3317' href='#n3317'>3317</a> <a id='n3318' href='#n3318'>3318</a> <a id='n3319' href='#n3319'>3319</a> <a id='n3320' href='#n3320'>3320</a> <a id='n3321' href='#n3321'>3321</a> <a id='n3322' href='#n3322'>3322</a> <a id='n3323' href='#n3323'>3323</a> <a id='n3324' href='#n3324'>3324</a> <a id='n3325' href='#n3325'>3325</a> <a id='n3326' href='#n3326'>3326</a> <a id='n3327' href='#n3327'>3327</a> <a id='n3328' href='#n3328'>3328</a> <a id='n3329' href='#n3329'>3329</a> <a id='n3330' href='#n3330'>3330</a> <a id='n3331' href='#n3331'>3331</a> <a id='n3332' href='#n3332'>3332</a> <a id='n3333' href='#n3333'>3333</a> <a id='n3334' href='#n3334'>3334</a> <a id='n3335' href='#n3335'>3335</a> <a id='n3336' href='#n3336'>3336</a> <a id='n3337' href='#n3337'>3337</a> <a id='n3338' href='#n3338'>3338</a> <a id='n3339' href='#n3339'>3339</a> <a id='n3340' href='#n3340'>3340</a> <a id='n3341' href='#n3341'>3341</a> <a id='n3342' href='#n3342'>3342</a> <a id='n3343' href='#n3343'>3343</a> <a id='n3344' href='#n3344'>3344</a> <a id='n3345' href='#n3345'>3345</a> <a id='n3346' href='#n3346'>3346</a> <a id='n3347' href='#n3347'>3347</a> <a id='n3348' href='#n3348'>3348</a> <a id='n3349' href='#n3349'>3349</a> <a id='n3350' href='#n3350'>3350</a> <a id='n3351' href='#n3351'>3351</a> <a id='n3352' href='#n3352'>3352</a> <a id='n3353' href='#n3353'>3353</a> <a id='n3354' href='#n3354'>3354</a> <a id='n3355' href='#n3355'>3355</a> <a id='n3356' href='#n3356'>3356</a> <a id='n3357' href='#n3357'>3357</a> <a id='n3358' href='#n3358'>3358</a> <a id='n3359' href='#n3359'>3359</a> <a id='n3360' href='#n3360'>3360</a> <a id='n3361' href='#n3361'>3361</a> <a id='n3362' href='#n3362'>3362</a> <a id='n3363' href='#n3363'>3363</a> <a id='n3364' href='#n3364'>3364</a> <a id='n3365' href='#n3365'>3365</a> <a id='n3366' href='#n3366'>3366</a> <a id='n3367' href='#n3367'>3367</a> <a id='n3368' href='#n3368'>3368</a> <a id='n3369' href='#n3369'>3369</a> <a id='n3370' href='#n3370'>3370</a> <a id='n3371' href='#n3371'>3371</a> <a id='n3372' href='#n3372'>3372</a> <a id='n3373' href='#n3373'>3373</a> <a id='n3374' href='#n3374'>3374</a> <a id='n3375' href='#n3375'>3375</a> <a id='n3376' href='#n3376'>3376</a> <a id='n3377' href='#n3377'>3377</a> <a id='n3378' href='#n3378'>3378</a> <a id='n3379' href='#n3379'>3379</a> <a id='n3380' href='#n3380'>3380</a> <a id='n3381' href='#n3381'>3381</a> <a id='n3382' href='#n3382'>3382</a> <a id='n3383' href='#n3383'>3383</a> <a id='n3384' href='#n3384'>3384</a> <a id='n3385' href='#n3385'>3385</a> <a id='n3386' href='#n3386'>3386</a> <a id='n3387' href='#n3387'>3387</a> <a id='n3388' href='#n3388'>3388</a> <a id='n3389' href='#n3389'>3389</a> <a id='n3390' href='#n3390'>3390</a> <a id='n3391' href='#n3391'>3391</a> <a id='n3392' href='#n3392'>3392</a> <a id='n3393' href='#n3393'>3393</a> <a id='n3394' href='#n3394'>3394</a> <a id='n3395' href='#n3395'>3395</a> <a id='n3396' href='#n3396'>3396</a> <a id='n3397' href='#n3397'>3397</a> <a id='n3398' href='#n3398'>3398</a> <a id='n3399' href='#n3399'>3399</a> <a id='n3400' href='#n3400'>3400</a> <a id='n3401' href='#n3401'>3401</a> <a id='n3402' href='#n3402'>3402</a> <a id='n3403' href='#n3403'>3403</a> <a id='n3404' href='#n3404'>3404</a> <a id='n3405' href='#n3405'>3405</a> <a id='n3406' href='#n3406'>3406</a> <a id='n3407' href='#n3407'>3407</a> <a id='n3408' href='#n3408'>3408</a> <a id='n3409' href='#n3409'>3409</a> <a id='n3410' href='#n3410'>3410</a> <a id='n3411' href='#n3411'>3411</a> <a id='n3412' href='#n3412'>3412</a> <a id='n3413' href='#n3413'>3413</a> <a id='n3414' href='#n3414'>3414</a> <a id='n3415' href='#n3415'>3415</a> <a id='n3416' href='#n3416'>3416</a> <a id='n3417' href='#n3417'>3417</a> <a id='n3418' href='#n3418'>3418</a> <a id='n3419' href='#n3419'>3419</a> <a id='n3420' href='#n3420'>3420</a> <a id='n3421' href='#n3421'>3421</a> <a id='n3422' href='#n3422'>3422</a> <a id='n3423' href='#n3423'>3423</a> <a id='n3424' href='#n3424'>3424</a> <a id='n3425' href='#n3425'>3425</a> <a id='n3426' href='#n3426'>3426</a> <a id='n3427' href='#n3427'>3427</a> <a id='n3428' href='#n3428'>3428</a> <a id='n3429' href='#n3429'>3429</a> <a id='n3430' href='#n3430'>3430</a> <a id='n3431' href='#n3431'>3431</a> <a id='n3432' href='#n3432'>3432</a> <a id='n3433' href='#n3433'>3433</a> <a id='n3434' href='#n3434'>3434</a> <a id='n3435' href='#n3435'>3435</a> <a id='n3436' href='#n3436'>3436</a> <a id='n3437' href='#n3437'>3437</a> <a id='n3438' href='#n3438'>3438</a> <a id='n3439' href='#n3439'>3439</a> <a id='n3440' href='#n3440'>3440</a> <a id='n3441' href='#n3441'>3441</a> <a id='n3442' href='#n3442'>3442</a> <a id='n3443' href='#n3443'>3443</a> <a id='n3444' href='#n3444'>3444</a> <a id='n3445' href='#n3445'>3445</a> <a id='n3446' href='#n3446'>3446</a> <a id='n3447' href='#n3447'>3447</a> <a id='n3448' href='#n3448'>3448</a> <a id='n3449' href='#n3449'>3449</a> <a id='n3450' href='#n3450'>3450</a> <a id='n3451' href='#n3451'>3451</a> <a id='n3452' href='#n3452'>3452</a> <a id='n3453' href='#n3453'>3453</a> <a id='n3454' href='#n3454'>3454</a> <a id='n3455' href='#n3455'>3455</a> <a id='n3456' href='#n3456'>3456</a> <a id='n3457' href='#n3457'>3457</a> <a id='n3458' href='#n3458'>3458</a> <a id='n3459' href='#n3459'>3459</a> <a id='n3460' href='#n3460'>3460</a> <a id='n3461' href='#n3461'>3461</a> <a id='n3462' href='#n3462'>3462</a> <a id='n3463' href='#n3463'>3463</a> <a id='n3464' href='#n3464'>3464</a> <a id='n3465' href='#n3465'>3465</a> <a id='n3466' href='#n3466'>3466</a> <a id='n3467' href='#n3467'>3467</a> <a id='n3468' href='#n3468'>3468</a> <a id='n3469' href='#n3469'>3469</a> <a id='n3470' href='#n3470'>3470</a> <a id='n3471' href='#n3471'>3471</a> <a id='n3472' href='#n3472'>3472</a> <a id='n3473' href='#n3473'>3473</a> <a id='n3474' href='#n3474'>3474</a> <a id='n3475' href='#n3475'>3475</a> <a id='n3476' href='#n3476'>3476</a> <a id='n3477' href='#n3477'>3477</a> <a id='n3478' href='#n3478'>3478</a> <a id='n3479' href='#n3479'>3479</a> <a id='n3480' href='#n3480'>3480</a> <a id='n3481' href='#n3481'>3481</a> <a id='n3482' href='#n3482'>3482</a> <a id='n3483' href='#n3483'>3483</a> <a id='n3484' href='#n3484'>3484</a> <a id='n3485' href='#n3485'>3485</a> <a id='n3486' href='#n3486'>3486</a> <a id='n3487' href='#n3487'>3487</a> <a id='n3488' href='#n3488'>3488</a> <a id='n3489' href='#n3489'>3489</a> <a id='n3490' href='#n3490'>3490</a> <a id='n3491' href='#n3491'>3491</a> <a id='n3492' href='#n3492'>3492</a> <a id='n3493' href='#n3493'>3493</a> <a id='n3494' href='#n3494'>3494</a> <a id='n3495' href='#n3495'>3495</a> <a id='n3496' href='#n3496'>3496</a> <a id='n3497' href='#n3497'>3497</a> <a id='n3498' href='#n3498'>3498</a> <a id='n3499' href='#n3499'>3499</a> <a id='n3500' href='#n3500'>3500</a> <a id='n3501' href='#n3501'>3501</a> <a id='n3502' href='#n3502'>3502</a> <a id='n3503' href='#n3503'>3503</a> <a id='n3504' href='#n3504'>3504</a> <a id='n3505' href='#n3505'>3505</a> <a id='n3506' href='#n3506'>3506</a> <a id='n3507' href='#n3507'>3507</a> <a id='n3508' href='#n3508'>3508</a> <a id='n3509' href='#n3509'>3509</a> <a id='n3510' href='#n3510'>3510</a> <a id='n3511' href='#n3511'>3511</a> <a id='n3512' href='#n3512'>3512</a> <a id='n3513' href='#n3513'>3513</a> <a id='n3514' href='#n3514'>3514</a> <a id='n3515' href='#n3515'>3515</a> <a id='n3516' href='#n3516'>3516</a> <a id='n3517' href='#n3517'>3517</a> <a id='n3518' href='#n3518'>3518</a> <a id='n3519' href='#n3519'>3519</a> <a id='n3520' href='#n3520'>3520</a> <a id='n3521' href='#n3521'>3521</a> <a id='n3522' href='#n3522'>3522</a> <a id='n3523' href='#n3523'>3523</a> <a id='n3524' href='#n3524'>3524</a> <a id='n3525' href='#n3525'>3525</a> <a id='n3526' href='#n3526'>3526</a> <a id='n3527' href='#n3527'>3527</a> <a id='n3528' href='#n3528'>3528</a> <a id='n3529' href='#n3529'>3529</a> <a id='n3530' href='#n3530'>3530</a> <a id='n3531' href='#n3531'>3531</a> <a id='n3532' href='#n3532'>3532</a> <a id='n3533' href='#n3533'>3533</a> <a id='n3534' href='#n3534'>3534</a> <a id='n3535' href='#n3535'>3535</a> <a id='n3536' href='#n3536'>3536</a> <a id='n3537' href='#n3537'>3537</a> <a id='n3538' href='#n3538'>3538</a> <a id='n3539' href='#n3539'>3539</a> <a id='n3540' href='#n3540'>3540</a> <a id='n3541' href='#n3541'>3541</a> <a id='n3542' href='#n3542'>3542</a> <a id='n3543' href='#n3543'>3543</a> <a id='n3544' href='#n3544'>3544</a> <a id='n3545' href='#n3545'>3545</a> <a id='n3546' href='#n3546'>3546</a> <a id='n3547' href='#n3547'>3547</a> <a id='n3548' href='#n3548'>3548</a> <a id='n3549' href='#n3549'>3549</a> <a id='n3550' href='#n3550'>3550</a> <a id='n3551' href='#n3551'>3551</a> <a id='n3552' href='#n3552'>3552</a> <a id='n3553' href='#n3553'>3553</a> <a id='n3554' href='#n3554'>3554</a> <a id='n3555' href='#n3555'>3555</a> <a id='n3556' href='#n3556'>3556</a> <a id='n3557' href='#n3557'>3557</a> <a id='n3558' href='#n3558'>3558</a> <a id='n3559' href='#n3559'>3559</a> <a id='n3560' href='#n3560'>3560</a> <a id='n3561' href='#n3561'>3561</a> <a id='n3562' href='#n3562'>3562</a> <a id='n3563' href='#n3563'>3563</a> <a id='n3564' href='#n3564'>3564</a> <a id='n3565' href='#n3565'>3565</a> <a id='n3566' href='#n3566'>3566</a> <a id='n3567' href='#n3567'>3567</a> <a id='n3568' href='#n3568'>3568</a> <a id='n3569' href='#n3569'>3569</a> <a id='n3570' href='#n3570'>3570</a> <a id='n3571' href='#n3571'>3571</a> <a id='n3572' href='#n3572'>3572</a> <a id='n3573' href='#n3573'>3573</a> <a id='n3574' href='#n3574'>3574</a> <a id='n3575' href='#n3575'>3575</a> <a id='n3576' href='#n3576'>3576</a> <a id='n3577' href='#n3577'>3577</a> <a id='n3578' href='#n3578'>3578</a> <a id='n3579' href='#n3579'>3579</a> <a id='n3580' href='#n3580'>3580</a> <a id='n3581' href='#n3581'>3581</a> <a id='n3582' href='#n3582'>3582</a> <a id='n3583' href='#n3583'>3583</a> <a id='n3584' href='#n3584'>3584</a> <a id='n3585' href='#n3585'>3585</a> <a id='n3586' href='#n3586'>3586</a> <a id='n3587' href='#n3587'>3587</a> <a id='n3588' href='#n3588'>3588</a> <a id='n3589' href='#n3589'>3589</a> <a id='n3590' href='#n3590'>3590</a> <a id='n3591' href='#n3591'>3591</a> <a id='n3592' href='#n3592'>3592</a> <a id='n3593' href='#n3593'>3593</a> <a id='n3594' href='#n3594'>3594</a> <a id='n3595' href='#n3595'>3595</a> <a id='n3596' href='#n3596'>3596</a> <a id='n3597' href='#n3597'>3597</a> <a id='n3598' href='#n3598'>3598</a> <a id='n3599' href='#n3599'>3599</a> <a id='n3600' href='#n3600'>3600</a> <a id='n3601' href='#n3601'>3601</a> <a id='n3602' href='#n3602'>3602</a> <a id='n3603' href='#n3603'>3603</a> <a id='n3604' href='#n3604'>3604</a> <a id='n3605' href='#n3605'>3605</a> <a id='n3606' href='#n3606'>3606</a> <a id='n3607' href='#n3607'>3607</a> <a id='n3608' href='#n3608'>3608</a> <a id='n3609' href='#n3609'>3609</a> <a id='n3610' href='#n3610'>3610</a> <a id='n3611' href='#n3611'>3611</a> <a id='n3612' href='#n3612'>3612</a> <a id='n3613' href='#n3613'>3613</a> <a id='n3614' href='#n3614'>3614</a> <a id='n3615' href='#n3615'>3615</a> <a id='n3616' href='#n3616'>3616</a> <a id='n3617' href='#n3617'>3617</a> <a id='n3618' href='#n3618'>3618</a> <a id='n3619' href='#n3619'>3619</a> <a id='n3620' href='#n3620'>3620</a> <a id='n3621' href='#n3621'>3621</a> <a id='n3622' href='#n3622'>3622</a> <a id='n3623' href='#n3623'>3623</a> <a id='n3624' href='#n3624'>3624</a> <a id='n3625' href='#n3625'>3625</a> <a id='n3626' href='#n3626'>3626</a> <a id='n3627' href='#n3627'>3627</a> <a id='n3628' href='#n3628'>3628</a> <a id='n3629' href='#n3629'>3629</a> <a id='n3630' href='#n3630'>3630</a> <a id='n3631' href='#n3631'>3631</a> <a id='n3632' href='#n3632'>3632</a> <a id='n3633' href='#n3633'>3633</a> <a id='n3634' href='#n3634'>3634</a> <a id='n3635' href='#n3635'>3635</a> <a id='n3636' href='#n3636'>3636</a> <a id='n3637' href='#n3637'>3637</a> <a id='n3638' href='#n3638'>3638</a> <a id='n3639' href='#n3639'>3639</a> <a id='n3640' href='#n3640'>3640</a> <a id='n3641' href='#n3641'>3641</a> <a id='n3642' href='#n3642'>3642</a> <a id='n3643' href='#n3643'>3643</a> <a id='n3644' href='#n3644'>3644</a> <a id='n3645' href='#n3645'>3645</a> <a id='n3646' href='#n3646'>3646</a> <a id='n3647' href='#n3647'>3647</a> <a id='n3648' href='#n3648'>3648</a> <a id='n3649' href='#n3649'>3649</a> <a id='n3650' href='#n3650'>3650</a> <a id='n3651' href='#n3651'>3651</a> <a id='n3652' href='#n3652'>3652</a> <a id='n3653' href='#n3653'>3653</a> <a id='n3654' href='#n3654'>3654</a> <a id='n3655' href='#n3655'>3655</a> <a id='n3656' href='#n3656'>3656</a> <a id='n3657' href='#n3657'>3657</a> <a id='n3658' href='#n3658'>3658</a> <a id='n3659' href='#n3659'>3659</a> <a id='n3660' href='#n3660'>3660</a> <a id='n3661' href='#n3661'>3661</a> <a id='n3662' href='#n3662'>3662</a> <a id='n3663' href='#n3663'>3663</a> <a id='n3664' href='#n3664'>3664</a> <a id='n3665' href='#n3665'>3665</a> <a id='n3666' href='#n3666'>3666</a> <a id='n3667' href='#n3667'>3667</a> <a id='n3668' href='#n3668'>3668</a> <a id='n3669' href='#n3669'>3669</a> <a id='n3670' href='#n3670'>3670</a> <a id='n3671' href='#n3671'>3671</a> <a id='n3672' href='#n3672'>3672</a> <a id='n3673' href='#n3673'>3673</a> <a id='n3674' href='#n3674'>3674</a> <a id='n3675' href='#n3675'>3675</a> <a id='n3676' href='#n3676'>3676</a> <a id='n3677' href='#n3677'>3677</a> <a id='n3678' href='#n3678'>3678</a> <a id='n3679' href='#n3679'>3679</a> <a id='n3680' href='#n3680'>3680</a> <a id='n3681' href='#n3681'>3681</a> <a id='n3682' href='#n3682'>3682</a> <a id='n3683' href='#n3683'>3683</a> <a id='n3684' href='#n3684'>3684</a> <a id='n3685' href='#n3685'>3685</a> <a id='n3686' href='#n3686'>3686</a> <a id='n3687' href='#n3687'>3687</a> <a id='n3688' href='#n3688'>3688</a> <a id='n3689' href='#n3689'>3689</a> <a id='n3690' href='#n3690'>3690</a> <a id='n3691' href='#n3691'>3691</a> <a id='n3692' href='#n3692'>3692</a> <a id='n3693' href='#n3693'>3693</a> <a id='n3694' href='#n3694'>3694</a> <a id='n3695' href='#n3695'>3695</a> <a id='n3696' href='#n3696'>3696</a> <a id='n3697' href='#n3697'>3697</a> <a id='n3698' href='#n3698'>3698</a> <a id='n3699' href='#n3699'>3699</a> <a id='n3700' href='#n3700'>3700</a> <a id='n3701' href='#n3701'>3701</a> <a id='n3702' href='#n3702'>3702</a> <a id='n3703' href='#n3703'>3703</a> <a id='n3704' href='#n3704'>3704</a> <a id='n3705' href='#n3705'>3705</a> <a id='n3706' href='#n3706'>3706</a> <a id='n3707' href='#n3707'>3707</a> <a id='n3708' href='#n3708'>3708</a> <a id='n3709' href='#n3709'>3709</a> <a id='n3710' href='#n3710'>3710</a> <a id='n3711' href='#n3711'>3711</a> <a id='n3712' href='#n3712'>3712</a> <a id='n3713' href='#n3713'>3713</a> <a id='n3714' href='#n3714'>3714</a> <a id='n3715' href='#n3715'>3715</a> <a id='n3716' href='#n3716'>3716</a> <a id='n3717' href='#n3717'>3717</a> <a id='n3718' href='#n3718'>3718</a> <a id='n3719' href='#n3719'>3719</a> <a id='n3720' href='#n3720'>3720</a> <a id='n3721' href='#n3721'>3721</a> <a id='n3722' href='#n3722'>3722</a> <a id='n3723' href='#n3723'>3723</a> <a id='n3724' href='#n3724'>3724</a> <a id='n3725' href='#n3725'>3725</a> <a id='n3726' href='#n3726'>3726</a> <a id='n3727' href='#n3727'>3727</a> <a id='n3728' href='#n3728'>3728</a> <a id='n3729' href='#n3729'>3729</a> <a id='n3730' href='#n3730'>3730</a> <a id='n3731' href='#n3731'>3731</a> <a id='n3732' href='#n3732'>3732</a> <a id='n3733' href='#n3733'>3733</a> <a id='n3734' href='#n3734'>3734</a> <a id='n3735' href='#n3735'>3735</a> <a id='n3736' href='#n3736'>3736</a> <a id='n3737' href='#n3737'>3737</a> <a id='n3738' href='#n3738'>3738</a> <a id='n3739' href='#n3739'>3739</a> <a id='n3740' href='#n3740'>3740</a> <a id='n3741' href='#n3741'>3741</a> <a id='n3742' href='#n3742'>3742</a> <a id='n3743' href='#n3743'>3743</a> <a id='n3744' href='#n3744'>3744</a> <a id='n3745' href='#n3745'>3745</a> <a id='n3746' href='#n3746'>3746</a> <a id='n3747' href='#n3747'>3747</a> <a id='n3748' href='#n3748'>3748</a> <a id='n3749' href='#n3749'>3749</a> <a id='n3750' href='#n3750'>3750</a> <a id='n3751' href='#n3751'>3751</a> <a id='n3752' href='#n3752'>3752</a> <a id='n3753' href='#n3753'>3753</a> <a id='n3754' href='#n3754'>3754</a> <a id='n3755' href='#n3755'>3755</a> <a id='n3756' href='#n3756'>3756</a> <a id='n3757' href='#n3757'>3757</a> <a id='n3758' href='#n3758'>3758</a> <a id='n3759' href='#n3759'>3759</a> <a id='n3760' href='#n3760'>3760</a> <a id='n3761' href='#n3761'>3761</a> <a id='n3762' href='#n3762'>3762</a> <a id='n3763' href='#n3763'>3763</a> <a id='n3764' href='#n3764'>3764</a> <a id='n3765' href='#n3765'>3765</a> <a id='n3766' href='#n3766'>3766</a> <a id='n3767' href='#n3767'>3767</a> <a id='n3768' href='#n3768'>3768</a> <a id='n3769' href='#n3769'>3769</a> <a id='n3770' href='#n3770'>3770</a> <a id='n3771' href='#n3771'>3771</a> <a id='n3772' href='#n3772'>3772</a> <a id='n3773' href='#n3773'>3773</a> <a id='n3774' href='#n3774'>3774</a> <a id='n3775' href='#n3775'>3775</a> <a id='n3776' href='#n3776'>3776</a> <a id='n3777' href='#n3777'>3777</a> <a id='n3778' href='#n3778'>3778</a> <a id='n3779' href='#n3779'>3779</a> <a id='n3780' href='#n3780'>3780</a> <a id='n3781' href='#n3781'>3781</a> <a id='n3782' href='#n3782'>3782</a> <a id='n3783' href='#n3783'>3783</a> <a id='n3784' href='#n3784'>3784</a> <a id='n3785' href='#n3785'>3785</a> <a id='n3786' href='#n3786'>3786</a> <a id='n3787' href='#n3787'>3787</a> <a id='n3788' href='#n3788'>3788</a> <a id='n3789' href='#n3789'>3789</a> <a id='n3790' href='#n3790'>3790</a> <a id='n3791' href='#n3791'>3791</a> <a id='n3792' href='#n3792'>3792</a> <a id='n3793' href='#n3793'>3793</a> <a id='n3794' href='#n3794'>3794</a> <a id='n3795' href='#n3795'>3795</a> <a id='n3796' href='#n3796'>3796</a> <a id='n3797' href='#n3797'>3797</a> <a id='n3798' href='#n3798'>3798</a> <a id='n3799' href='#n3799'>3799</a> <a id='n3800' href='#n3800'>3800</a> <a id='n3801' href='#n3801'>3801</a> <a id='n3802' href='#n3802'>3802</a> <a id='n3803' href='#n3803'>3803</a> <a id='n3804' href='#n3804'>3804</a> <a id='n3805' href='#n3805'>3805</a> <a id='n3806' href='#n3806'>3806</a> <a id='n3807' href='#n3807'>3807</a> <a id='n3808' href='#n3808'>3808</a> <a id='n3809' href='#n3809'>3809</a> <a id='n3810' href='#n3810'>3810</a> <a id='n3811' href='#n3811'>3811</a> <a id='n3812' href='#n3812'>3812</a> <a id='n3813' href='#n3813'>3813</a> <a id='n3814' href='#n3814'>3814</a> <a id='n3815' href='#n3815'>3815</a> <a id='n3816' href='#n3816'>3816</a> <a id='n3817' href='#n3817'>3817</a> <a id='n3818' href='#n3818'>3818</a> <a id='n3819' href='#n3819'>3819</a> <a id='n3820' href='#n3820'>3820</a> <a id='n3821' href='#n3821'>3821</a> <a id='n3822' href='#n3822'>3822</a> <a id='n3823' href='#n3823'>3823</a> <a id='n3824' href='#n3824'>3824</a> <a id='n3825' href='#n3825'>3825</a> <a id='n3826' href='#n3826'>3826</a> <a id='n3827' href='#n3827'>3827</a> <a id='n3828' href='#n3828'>3828</a> <a id='n3829' href='#n3829'>3829</a> <a id='n3830' href='#n3830'>3830</a> <a id='n3831' href='#n3831'>3831</a> <a id='n3832' href='#n3832'>3832</a> <a id='n3833' href='#n3833'>3833</a> <a id='n3834' href='#n3834'>3834</a> <a id='n3835' href='#n3835'>3835</a> <a id='n3836' href='#n3836'>3836</a> <a id='n3837' href='#n3837'>3837</a> <a id='n3838' href='#n3838'>3838</a> <a id='n3839' href='#n3839'>3839</a> <a id='n3840' href='#n3840'>3840</a> <a id='n3841' href='#n3841'>3841</a> <a id='n3842' href='#n3842'>3842</a> <a id='n3843' href='#n3843'>3843</a> <a id='n3844' href='#n3844'>3844</a> <a id='n3845' href='#n3845'>3845</a> <a id='n3846' href='#n3846'>3846</a> <a id='n3847' href='#n3847'>3847</a> <a id='n3848' href='#n3848'>3848</a> <a id='n3849' href='#n3849'>3849</a> <a id='n3850' href='#n3850'>3850</a> <a id='n3851' href='#n3851'>3851</a> <a id='n3852' href='#n3852'>3852</a> <a id='n3853' href='#n3853'>3853</a> <a id='n3854' href='#n3854'>3854</a> <a id='n3855' href='#n3855'>3855</a> <a id='n3856' href='#n3856'>3856</a> <a id='n3857' href='#n3857'>3857</a> <a id='n3858' href='#n3858'>3858</a> <a id='n3859' href='#n3859'>3859</a> <a id='n3860' href='#n3860'>3860</a> <a id='n3861' href='#n3861'>3861</a> <a id='n3862' href='#n3862'>3862</a> <a id='n3863' href='#n3863'>3863</a> <a id='n3864' href='#n3864'>3864</a> <a id='n3865' href='#n3865'>3865</a> <a id='n3866' href='#n3866'>3866</a> <a id='n3867' href='#n3867'>3867</a> <a id='n3868' href='#n3868'>3868</a> <a id='n3869' href='#n3869'>3869</a> <a id='n3870' href='#n3870'>3870</a> <a id='n3871' href='#n3871'>3871</a> <a id='n3872' href='#n3872'>3872</a> <a id='n3873' href='#n3873'>3873</a> <a id='n3874' href='#n3874'>3874</a> <a id='n3875' href='#n3875'>3875</a> <a id='n3876' href='#n3876'>3876</a> <a id='n3877' href='#n3877'>3877</a> <a id='n3878' href='#n3878'>3878</a> <a id='n3879' href='#n3879'>3879</a> <a id='n3880' href='#n3880'>3880</a> <a id='n3881' href='#n3881'>3881</a> <a id='n3882' href='#n3882'>3882</a> <a id='n3883' href='#n3883'>3883</a> <a id='n3884' href='#n3884'>3884</a> <a id='n3885' href='#n3885'>3885</a> <a id='n3886' href='#n3886'>3886</a> <a id='n3887' href='#n3887'>3887</a> <a id='n3888' href='#n3888'>3888</a> <a id='n3889' href='#n3889'>3889</a> <a id='n3890' href='#n3890'>3890</a> <a id='n3891' href='#n3891'>3891</a> <a id='n3892' href='#n3892'>3892</a> <a id='n3893' href='#n3893'>3893</a> <a id='n3894' href='#n3894'>3894</a> <a id='n3895' href='#n3895'>3895</a> <a id='n3896' href='#n3896'>3896</a> <a id='n3897' href='#n3897'>3897</a> <a id='n3898' href='#n3898'>3898</a> <a id='n3899' href='#n3899'>3899</a> <a id='n3900' href='#n3900'>3900</a> <a id='n3901' href='#n3901'>3901</a> <a id='n3902' href='#n3902'>3902</a> <a id='n3903' href='#n3903'>3903</a> <a id='n3904' href='#n3904'>3904</a> <a id='n3905' href='#n3905'>3905</a> <a id='n3906' href='#n3906'>3906</a> <a id='n3907' href='#n3907'>3907</a> <a id='n3908' href='#n3908'>3908</a> <a id='n3909' href='#n3909'>3909</a> <a id='n3910' href='#n3910'>3910</a> <a id='n3911' href='#n3911'>3911</a> <a id='n3912' href='#n3912'>3912</a> <a id='n3913' href='#n3913'>3913</a> <a id='n3914' href='#n3914'>3914</a> <a id='n3915' href='#n3915'>3915</a> <a id='n3916' href='#n3916'>3916</a> <a id='n3917' href='#n3917'>3917</a> <a id='n3918' href='#n3918'>3918</a> <a id='n3919' href='#n3919'>3919</a> <a id='n3920' href='#n3920'>3920</a> <a id='n3921' href='#n3921'>3921</a> <a id='n3922' href='#n3922'>3922</a> <a id='n3923' href='#n3923'>3923</a> <a id='n3924' href='#n3924'>3924</a> <a id='n3925' href='#n3925'>3925</a> <a id='n3926' href='#n3926'>3926</a> <a id='n3927' href='#n3927'>3927</a> <a id='n3928' href='#n3928'>3928</a> <a id='n3929' href='#n3929'>3929</a> <a id='n3930' href='#n3930'>3930</a> <a id='n3931' href='#n3931'>3931</a> <a id='n3932' href='#n3932'>3932</a> <a id='n3933' href='#n3933'>3933</a> <a id='n3934' href='#n3934'>3934</a> <a id='n3935' href='#n3935'>3935</a> <a id='n3936' href='#n3936'>3936</a> <a id='n3937' href='#n3937'>3937</a> <a id='n3938' href='#n3938'>3938</a> <a id='n3939' href='#n3939'>3939</a> <a id='n3940' href='#n3940'>3940</a> <a id='n3941' href='#n3941'>3941</a> <a id='n3942' href='#n3942'>3942</a> <a id='n3943' href='#n3943'>3943</a> <a id='n3944' href='#n3944'>3944</a> <a id='n3945' href='#n3945'>3945</a> <a id='n3946' href='#n3946'>3946</a> <a id='n3947' href='#n3947'>3947</a> <a id='n3948' href='#n3948'>3948</a> <a id='n3949' href='#n3949'>3949</a> <a id='n3950' href='#n3950'>3950</a> <a id='n3951' href='#n3951'>3951</a> <a id='n3952' href='#n3952'>3952</a> <a id='n3953' href='#n3953'>3953</a> <a id='n3954' href='#n3954'>3954</a> <a id='n3955' href='#n3955'>3955</a> <a id='n3956' href='#n3956'>3956</a> <a id='n3957' href='#n3957'>3957</a> <a id='n3958' href='#n3958'>3958</a> <a id='n3959' href='#n3959'>3959</a> <a id='n3960' href='#n3960'>3960</a> <a id='n3961' href='#n3961'>3961</a> <a id='n3962' href='#n3962'>3962</a> <a id='n3963' href='#n3963'>3963</a> <a id='n3964' href='#n3964'>3964</a> <a id='n3965' href='#n3965'>3965</a> <a id='n3966' href='#n3966'>3966</a> <a id='n3967' href='#n3967'>3967</a> <a id='n3968' href='#n3968'>3968</a> <a id='n3969' href='#n3969'>3969</a> <a id='n3970' href='#n3970'>3970</a> <a id='n3971' href='#n3971'>3971</a> <a id='n3972' href='#n3972'>3972</a> <a id='n3973' href='#n3973'>3973</a> <a id='n3974' href='#n3974'>3974</a> <a id='n3975' href='#n3975'>3975</a> <a id='n3976' href='#n3976'>3976</a> <a id='n3977' href='#n3977'>3977</a> <a id='n3978' href='#n3978'>3978</a> <a id='n3979' href='#n3979'>3979</a> <a id='n3980' href='#n3980'>3980</a> <a id='n3981' href='#n3981'>3981</a> <a id='n3982' href='#n3982'>3982</a> <a id='n3983' href='#n3983'>3983</a> <a id='n3984' href='#n3984'>3984</a> <a id='n3985' href='#n3985'>3985</a> <a id='n3986' href='#n3986'>3986</a> <a id='n3987' href='#n3987'>3987</a> <a id='n3988' href='#n3988'>3988</a> <a id='n3989' href='#n3989'>3989</a> <a id='n3990' href='#n3990'>3990</a> <a id='n3991' href='#n3991'>3991</a> <a id='n3992' href='#n3992'>3992</a> <a id='n3993' href='#n3993'>3993</a> <a id='n3994' href='#n3994'>3994</a> <a id='n3995' href='#n3995'>3995</a> <a id='n3996' href='#n3996'>3996</a> <a id='n3997' href='#n3997'>3997</a> <a id='n3998' href='#n3998'>3998</a> <a id='n3999' href='#n3999'>3999</a> <a id='n4000' href='#n4000'>4000</a> <a id='n4001' href='#n4001'>4001</a> <a id='n4002' href='#n4002'>4002</a> <a id='n4003' href='#n4003'>4003</a> <a id='n4004' href='#n4004'>4004</a> <a id='n4005' href='#n4005'>4005</a> <a id='n4006' href='#n4006'>4006</a> <a id='n4007' href='#n4007'>4007</a> <a id='n4008' href='#n4008'>4008</a> <a id='n4009' href='#n4009'>4009</a> <a id='n4010' href='#n4010'>4010</a> <a id='n4011' href='#n4011'>4011</a> <a id='n4012' href='#n4012'>4012</a> <a id='n4013' href='#n4013'>4013</a> <a id='n4014' href='#n4014'>4014</a> <a id='n4015' href='#n4015'>4015</a> <a id='n4016' href='#n4016'>4016</a> <a id='n4017' href='#n4017'>4017</a> <a id='n4018' href='#n4018'>4018</a> <a id='n4019' href='#n4019'>4019</a> <a id='n4020' href='#n4020'>4020</a> <a id='n4021' href='#n4021'>4021</a> <a id='n4022' href='#n4022'>4022</a> <a id='n4023' href='#n4023'>4023</a> <a id='n4024' href='#n4024'>4024</a> <a id='n4025' href='#n4025'>4025</a> <a id='n4026' href='#n4026'>4026</a> <a id='n4027' href='#n4027'>4027</a> <a id='n4028' href='#n4028'>4028</a> <a id='n4029' href='#n4029'>4029</a> <a id='n4030' href='#n4030'>4030</a> <a id='n4031' href='#n4031'>4031</a> <a id='n4032' href='#n4032'>4032</a> <a id='n4033' href='#n4033'>4033</a> <a id='n4034' href='#n4034'>4034</a> <a id='n4035' href='#n4035'>4035</a> <a id='n4036' href='#n4036'>4036</a> <a id='n4037' href='#n4037'>4037</a> <a id='n4038' href='#n4038'>4038</a> <a id='n4039' href='#n4039'>4039</a> <a id='n4040' href='#n4040'>4040</a> <a id='n4041' href='#n4041'>4041</a> <a id='n4042' href='#n4042'>4042</a> <a id='n4043' href='#n4043'>4043</a> <a id='n4044' href='#n4044'>4044</a> <a id='n4045' href='#n4045'>4045</a> <a id='n4046' href='#n4046'>4046</a> <a id='n4047' href='#n4047'>4047</a> <a id='n4048' href='#n4048'>4048</a> <a id='n4049' href='#n4049'>4049</a> <a id='n4050' href='#n4050'>4050</a> <a id='n4051' href='#n4051'>4051</a> <a id='n4052' href='#n4052'>4052</a> <a id='n4053' href='#n4053'>4053</a> <a id='n4054' href='#n4054'>4054</a> <a id='n4055' href='#n4055'>4055</a> <a id='n4056' href='#n4056'>4056</a> <a id='n4057' href='#n4057'>4057</a> <a id='n4058' href='#n4058'>4058</a> <a id='n4059' href='#n4059'>4059</a> <a id='n4060' href='#n4060'>4060</a> <a id='n4061' href='#n4061'>4061</a> <a id='n4062' href='#n4062'>4062</a> <a id='n4063' href='#n4063'>4063</a> <a id='n4064' href='#n4064'>4064</a> <a id='n4065' href='#n4065'>4065</a> <a id='n4066' href='#n4066'>4066</a> <a id='n4067' href='#n4067'>4067</a> <a id='n4068' href='#n4068'>4068</a> <a id='n4069' href='#n4069'>4069</a> <a id='n4070' href='#n4070'>4070</a> <a id='n4071' href='#n4071'>4071</a> <a id='n4072' href='#n4072'>4072</a> <a id='n4073' href='#n4073'>4073</a> <a id='n4074' href='#n4074'>4074</a> <a id='n4075' href='#n4075'>4075</a> <a id='n4076' href='#n4076'>4076</a> <a id='n4077' href='#n4077'>4077</a> <a id='n4078' href='#n4078'>4078</a> <a id='n4079' href='#n4079'>4079</a> <a id='n4080' href='#n4080'>4080</a> <a id='n4081' href='#n4081'>4081</a> <a id='n4082' href='#n4082'>4082</a> <a id='n4083' href='#n4083'>4083</a> <a id='n4084' href='#n4084'>4084</a> <a id='n4085' href='#n4085'>4085</a> <a id='n4086' href='#n4086'>4086</a> <a id='n4087' href='#n4087'>4087</a> <a id='n4088' href='#n4088'>4088</a> <a id='n4089' href='#n4089'>4089</a> <a id='n4090' href='#n4090'>4090</a> <a id='n4091' href='#n4091'>4091</a> <a id='n4092' href='#n4092'>4092</a> <a id='n4093' href='#n4093'>4093</a> <a id='n4094' href='#n4094'>4094</a> <a id='n4095' href='#n4095'>4095</a> <a id='n4096' href='#n4096'>4096</a> <a id='n4097' href='#n4097'>4097</a> <a id='n4098' href='#n4098'>4098</a> <a id='n4099' href='#n4099'>4099</a> <a id='n4100' href='#n4100'>4100</a> <a id='n4101' href='#n4101'>4101</a> <a id='n4102' href='#n4102'>4102</a> <a id='n4103' href='#n4103'>4103</a> <a id='n4104' href='#n4104'>4104</a> <a id='n4105' href='#n4105'>4105</a> <a id='n4106' href='#n4106'>4106</a> <a id='n4107' href='#n4107'>4107</a> <a id='n4108' href='#n4108'>4108</a> <a id='n4109' href='#n4109'>4109</a> <a id='n4110' href='#n4110'>4110</a> <a id='n4111' href='#n4111'>4111</a> <a id='n4112' href='#n4112'>4112</a> <a id='n4113' href='#n4113'>4113</a> <a id='n4114' href='#n4114'>4114</a> <a id='n4115' href='#n4115'>4115</a> <a id='n4116' href='#n4116'>4116</a> <a id='n4117' href='#n4117'>4117</a> <a id='n4118' href='#n4118'>4118</a> <a id='n4119' href='#n4119'>4119</a> <a id='n4120' href='#n4120'>4120</a> <a id='n4121' href='#n4121'>4121</a> <a id='n4122' href='#n4122'>4122</a> <a id='n4123' href='#n4123'>4123</a> <a id='n4124' href='#n4124'>4124</a> <a id='n4125' href='#n4125'>4125</a> <a id='n4126' href='#n4126'>4126</a> <a id='n4127' href='#n4127'>4127</a> <a id='n4128' href='#n4128'>4128</a> <a id='n4129' href='#n4129'>4129</a> <a id='n4130' href='#n4130'>4130</a> <a id='n4131' href='#n4131'>4131</a> <a id='n4132' href='#n4132'>4132</a> <a id='n4133' href='#n4133'>4133</a> <a id='n4134' href='#n4134'>4134</a> <a id='n4135' href='#n4135'>4135</a> <a id='n4136' href='#n4136'>4136</a> <a id='n4137' href='#n4137'>4137</a> <a id='n4138' href='#n4138'>4138</a> <a id='n4139' href='#n4139'>4139</a> <a id='n4140' href='#n4140'>4140</a> <a id='n4141' href='#n4141'>4141</a> <a id='n4142' href='#n4142'>4142</a> <a id='n4143' href='#n4143'>4143</a> <a id='n4144' href='#n4144'>4144</a> <a id='n4145' href='#n4145'>4145</a> <a id='n4146' href='#n4146'>4146</a> <a id='n4147' href='#n4147'>4147</a> <a id='n4148' href='#n4148'>4148</a> <a id='n4149' href='#n4149'>4149</a> <a id='n4150' href='#n4150'>4150</a> <a id='n4151' href='#n4151'>4151</a> <a id='n4152' href='#n4152'>4152</a> <a id='n4153' href='#n4153'>4153</a> <a id='n4154' href='#n4154'>4154</a> <a id='n4155' href='#n4155'>4155</a> <a id='n4156' href='#n4156'>4156</a> <a id='n4157' href='#n4157'>4157</a> <a id='n4158' href='#n4158'>4158</a> <a id='n4159' href='#n4159'>4159</a> <a id='n4160' href='#n4160'>4160</a> <a id='n4161' href='#n4161'>4161</a> <a id='n4162' href='#n4162'>4162</a> <a id='n4163' href='#n4163'>4163</a> <a id='n4164' href='#n4164'>4164</a> <a id='n4165' href='#n4165'>4165</a> <a id='n4166' href='#n4166'>4166</a> <a id='n4167' href='#n4167'>4167</a> <a id='n4168' href='#n4168'>4168</a> <a id='n4169' href='#n4169'>4169</a> <a id='n4170' href='#n4170'>4170</a> <a id='n4171' href='#n4171'>4171</a> <a id='n4172' href='#n4172'>4172</a> <a id='n4173' href='#n4173'>4173</a> <a id='n4174' href='#n4174'>4174</a> <a id='n4175' href='#n4175'>4175</a> <a id='n4176' href='#n4176'>4176</a> <a id='n4177' href='#n4177'>4177</a> <a id='n4178' href='#n4178'>4178</a> <a id='n4179' href='#n4179'>4179</a> <a id='n4180' href='#n4180'>4180</a> <a id='n4181' href='#n4181'>4181</a> <a id='n4182' href='#n4182'>4182</a> <a id='n4183' href='#n4183'>4183</a> <a id='n4184' href='#n4184'>4184</a> <a id='n4185' href='#n4185'>4185</a> <a id='n4186' href='#n4186'>4186</a> <a id='n4187' href='#n4187'>4187</a> <a id='n4188' href='#n4188'>4188</a> <a id='n4189' href='#n4189'>4189</a> <a id='n4190' href='#n4190'>4190</a> <a id='n4191' href='#n4191'>4191</a> <a id='n4192' href='#n4192'>4192</a> <a id='n4193' href='#n4193'>4193</a> <a id='n4194' href='#n4194'>4194</a> <a id='n4195' href='#n4195'>4195</a> <a id='n4196' href='#n4196'>4196</a> <a id='n4197' href='#n4197'>4197</a> <a id='n4198' href='#n4198'>4198</a> <a id='n4199' href='#n4199'>4199</a> <a id='n4200' href='#n4200'>4200</a> <a id='n4201' href='#n4201'>4201</a> <a id='n4202' href='#n4202'>4202</a> <a id='n4203' href='#n4203'>4203</a> <a id='n4204' href='#n4204'>4204</a> <a id='n4205' href='#n4205'>4205</a> <a id='n4206' href='#n4206'>4206</a> <a id='n4207' href='#n4207'>4207</a> <a id='n4208' href='#n4208'>4208</a> <a id='n4209' href='#n4209'>4209</a> <a id='n4210' href='#n4210'>4210</a> <a id='n4211' href='#n4211'>4211</a> <a id='n4212' href='#n4212'>4212</a> <a id='n4213' href='#n4213'>4213</a> <a id='n4214' href='#n4214'>4214</a> <a id='n4215' href='#n4215'>4215</a> <a id='n4216' href='#n4216'>4216</a> <a id='n4217' href='#n4217'>4217</a> <a id='n4218' href='#n4218'>4218</a> <a id='n4219' href='#n4219'>4219</a> <a id='n4220' href='#n4220'>4220</a> <a id='n4221' href='#n4221'>4221</a> <a id='n4222' href='#n4222'>4222</a> <a id='n4223' href='#n4223'>4223</a> <a id='n4224' href='#n4224'>4224</a> <a id='n4225' href='#n4225'>4225</a> <a id='n4226' href='#n4226'>4226</a> <a id='n4227' href='#n4227'>4227</a> <a id='n4228' href='#n4228'>4228</a> <a id='n4229' href='#n4229'>4229</a> <a id='n4230' href='#n4230'>4230</a> <a id='n4231' href='#n4231'>4231</a> <a id='n4232' href='#n4232'>4232</a> <a id='n4233' href='#n4233'>4233</a> <a id='n4234' href='#n4234'>4234</a> <a id='n4235' href='#n4235'>4235</a> <a id='n4236' href='#n4236'>4236</a> <a id='n4237' href='#n4237'>4237</a> <a id='n4238' href='#n4238'>4238</a> <a id='n4239' href='#n4239'>4239</a> <a id='n4240' href='#n4240'>4240</a> <a id='n4241' href='#n4241'>4241</a> <a id='n4242' href='#n4242'>4242</a> <a id='n4243' href='#n4243'>4243</a> <a id='n4244' href='#n4244'>4244</a> <a id='n4245' href='#n4245'>4245</a> <a id='n4246' href='#n4246'>4246</a> <a id='n4247' href='#n4247'>4247</a> <a id='n4248' href='#n4248'>4248</a> <a id='n4249' href='#n4249'>4249</a> <a id='n4250' href='#n4250'>4250</a> <a id='n4251' href='#n4251'>4251</a> <a id='n4252' href='#n4252'>4252</a> <a id='n4253' href='#n4253'>4253</a> <a id='n4254' href='#n4254'>4254</a> <a id='n4255' href='#n4255'>4255</a> <a id='n4256' href='#n4256'>4256</a> <a id='n4257' href='#n4257'>4257</a> <a id='n4258' href='#n4258'>4258</a> <a id='n4259' href='#n4259'>4259</a> <a id='n4260' href='#n4260'>4260</a> <a id='n4261' href='#n4261'>4261</a> <a id='n4262' href='#n4262'>4262</a> <a id='n4263' href='#n4263'>4263</a> <a id='n4264' href='#n4264'>4264</a> <a id='n4265' href='#n4265'>4265</a> <a id='n4266' href='#n4266'>4266</a> <a id='n4267' href='#n4267'>4267</a> <a id='n4268' href='#n4268'>4268</a> <a id='n4269' href='#n4269'>4269</a> <a id='n4270' href='#n4270'>4270</a> <a id='n4271' href='#n4271'>4271</a> <a id='n4272' href='#n4272'>4272</a> <a id='n4273' href='#n4273'>4273</a> <a id='n4274' href='#n4274'>4274</a> <a id='n4275' href='#n4275'>4275</a> <a id='n4276' href='#n4276'>4276</a> <a id='n4277' href='#n4277'>4277</a> <a id='n4278' href='#n4278'>4278</a> <a id='n4279' href='#n4279'>4279</a> <a id='n4280' href='#n4280'>4280</a> <a id='n4281' href='#n4281'>4281</a> <a id='n4282' href='#n4282'>4282</a> <a id='n4283' href='#n4283'>4283</a> <a id='n4284' href='#n4284'>4284</a> <a id='n4285' href='#n4285'>4285</a> <a id='n4286' href='#n4286'>4286</a> <a id='n4287' href='#n4287'>4287</a> <a id='n4288' href='#n4288'>4288</a> <a id='n4289' href='#n4289'>4289</a> <a id='n4290' href='#n4290'>4290</a> <a id='n4291' href='#n4291'>4291</a> <a id='n4292' href='#n4292'>4292</a> <a id='n4293' href='#n4293'>4293</a> <a id='n4294' href='#n4294'>4294</a> <a id='n4295' href='#n4295'>4295</a> <a id='n4296' href='#n4296'>4296</a> <a id='n4297' href='#n4297'>4297</a> <a id='n4298' href='#n4298'>4298</a> <a id='n4299' href='#n4299'>4299</a> <a id='n4300' href='#n4300'>4300</a> <a id='n4301' href='#n4301'>4301</a> <a id='n4302' href='#n4302'>4302</a> <a id='n4303' href='#n4303'>4303</a> <a id='n4304' href='#n4304'>4304</a> <a id='n4305' href='#n4305'>4305</a> <a id='n4306' href='#n4306'>4306</a> <a id='n4307' href='#n4307'>4307</a> <a id='n4308' href='#n4308'>4308</a> <a id='n4309' href='#n4309'>4309</a> <a id='n4310' href='#n4310'>4310</a> <a id='n4311' href='#n4311'>4311</a> <a id='n4312' href='#n4312'>4312</a> <a id='n4313' href='#n4313'>4313</a> <a id='n4314' href='#n4314'>4314</a> <a id='n4315' href='#n4315'>4315</a> <a id='n4316' href='#n4316'>4316</a> <a id='n4317' href='#n4317'>4317</a> <a id='n4318' href='#n4318'>4318</a> <a id='n4319' href='#n4319'>4319</a> <a id='n4320' href='#n4320'>4320</a> <a id='n4321' href='#n4321'>4321</a> <a id='n4322' href='#n4322'>4322</a> <a id='n4323' href='#n4323'>4323</a> <a id='n4324' href='#n4324'>4324</a> <a id='n4325' href='#n4325'>4325</a> <a id='n4326' href='#n4326'>4326</a> <a id='n4327' href='#n4327'>4327</a> <a id='n4328' href='#n4328'>4328</a> <a id='n4329' href='#n4329'>4329</a> <a id='n4330' href='#n4330'>4330</a> <a id='n4331' href='#n4331'>4331</a> <a id='n4332' href='#n4332'>4332</a> <a id='n4333' href='#n4333'>4333</a> <a id='n4334' href='#n4334'>4334</a> <a id='n4335' href='#n4335'>4335</a> <a id='n4336' href='#n4336'>4336</a> <a id='n4337' href='#n4337'>4337</a> <a id='n4338' href='#n4338'>4338</a> <a id='n4339' href='#n4339'>4339</a> <a id='n4340' href='#n4340'>4340</a> <a id='n4341' href='#n4341'>4341</a> <a id='n4342' href='#n4342'>4342</a> <a id='n4343' href='#n4343'>4343</a> <a id='n4344' href='#n4344'>4344</a> <a id='n4345' href='#n4345'>4345</a> <a id='n4346' href='#n4346'>4346</a> <a id='n4347' href='#n4347'>4347</a> <a id='n4348' href='#n4348'>4348</a> <a id='n4349' href='#n4349'>4349</a> <a id='n4350' href='#n4350'>4350</a> <a id='n4351' href='#n4351'>4351</a> <a id='n4352' href='#n4352'>4352</a> <a id='n4353' href='#n4353'>4353</a> <a id='n4354' href='#n4354'>4354</a> <a id='n4355' href='#n4355'>4355</a> <a id='n4356' href='#n4356'>4356</a> <a id='n4357' href='#n4357'>4357</a> <a id='n4358' href='#n4358'>4358</a> <a id='n4359' href='#n4359'>4359</a> <a id='n4360' href='#n4360'>4360</a> <a id='n4361' href='#n4361'>4361</a> <a id='n4362' href='#n4362'>4362</a> <a id='n4363' href='#n4363'>4363</a> <a id='n4364' href='#n4364'>4364</a> <a id='n4365' href='#n4365'>4365</a> <a id='n4366' href='#n4366'>4366</a> <a id='n4367' href='#n4367'>4367</a> <a id='n4368' href='#n4368'>4368</a> <a id='n4369' href='#n4369'>4369</a> <a id='n4370' href='#n4370'>4370</a> <a id='n4371' href='#n4371'>4371</a> <a id='n4372' href='#n4372'>4372</a> <a id='n4373' href='#n4373'>4373</a> <a id='n4374' href='#n4374'>4374</a> <a id='n4375' href='#n4375'>4375</a> <a id='n4376' href='#n4376'>4376</a> <a id='n4377' href='#n4377'>4377</a> <a id='n4378' href='#n4378'>4378</a> <a id='n4379' href='#n4379'>4379</a> <a id='n4380' href='#n4380'>4380</a> <a id='n4381' href='#n4381'>4381</a> <a id='n4382' href='#n4382'>4382</a> <a id='n4383' href='#n4383'>4383</a> <a id='n4384' href='#n4384'>4384</a> <a id='n4385' href='#n4385'>4385</a> <a id='n4386' href='#n4386'>4386</a> <a id='n4387' href='#n4387'>4387</a> <a id='n4388' href='#n4388'>4388</a> <a id='n4389' href='#n4389'>4389</a> <a id='n4390' href='#n4390'>4390</a> <a id='n4391' href='#n4391'>4391</a> <a id='n4392' href='#n4392'>4392</a> <a id='n4393' href='#n4393'>4393</a> <a id='n4394' href='#n4394'>4394</a> <a id='n4395' href='#n4395'>4395</a> <a id='n4396' href='#n4396'>4396</a> <a id='n4397' href='#n4397'>4397</a> <a id='n4398' href='#n4398'>4398</a> <a id='n4399' href='#n4399'>4399</a> <a id='n4400' href='#n4400'>4400</a> <a id='n4401' href='#n4401'>4401</a> <a id='n4402' href='#n4402'>4402</a> <a id='n4403' href='#n4403'>4403</a> <a id='n4404' href='#n4404'>4404</a> <a id='n4405' href='#n4405'>4405</a> <a id='n4406' href='#n4406'>4406</a> <a id='n4407' href='#n4407'>4407</a> <a id='n4408' href='#n4408'>4408</a> <a id='n4409' href='#n4409'>4409</a> <a id='n4410' href='#n4410'>4410</a> <a id='n4411' href='#n4411'>4411</a> <a id='n4412' href='#n4412'>4412</a> <a id='n4413' href='#n4413'>4413</a> <a id='n4414' href='#n4414'>4414</a> <a id='n4415' href='#n4415'>4415</a> <a id='n4416' href='#n4416'>4416</a> <a id='n4417' href='#n4417'>4417</a> <a id='n4418' href='#n4418'>4418</a> <a id='n4419' href='#n4419'>4419</a> <a id='n4420' href='#n4420'>4420</a> <a id='n4421' href='#n4421'>4421</a> <a id='n4422' href='#n4422'>4422</a> <a id='n4423' href='#n4423'>4423</a> <a id='n4424' href='#n4424'>4424</a> <a id='n4425' href='#n4425'>4425</a> <a id='n4426' href='#n4426'>4426</a> <a id='n4427' href='#n4427'>4427</a> <a id='n4428' href='#n4428'>4428</a> <a id='n4429' href='#n4429'>4429</a> <a id='n4430' href='#n4430'>4430</a> <a id='n4431' href='#n4431'>4431</a> <a id='n4432' href='#n4432'>4432</a> <a id='n4433' href='#n4433'>4433</a> <a id='n4434' href='#n4434'>4434</a> <a id='n4435' href='#n4435'>4435</a> <a id='n4436' href='#n4436'>4436</a> <a id='n4437' href='#n4437'>4437</a> <a id='n4438' href='#n4438'>4438</a> <a id='n4439' href='#n4439'>4439</a> <a id='n4440' href='#n4440'>4440</a> <a id='n4441' href='#n4441'>4441</a> <a id='n4442' href='#n4442'>4442</a> <a id='n4443' href='#n4443'>4443</a> <a id='n4444' href='#n4444'>4444</a> <a id='n4445' href='#n4445'>4445</a> <a id='n4446' href='#n4446'>4446</a> <a id='n4447' href='#n4447'>4447</a> <a id='n4448' href='#n4448'>4448</a> <a id='n4449' href='#n4449'>4449</a> <a id='n4450' href='#n4450'>4450</a> <a id='n4451' href='#n4451'>4451</a> <a id='n4452' href='#n4452'>4452</a> <a id='n4453' href='#n4453'>4453</a> <a id='n4454' href='#n4454'>4454</a> <a id='n4455' href='#n4455'>4455</a> <a id='n4456' href='#n4456'>4456</a> <a id='n4457' href='#n4457'>4457</a> <a id='n4458' href='#n4458'>4458</a> <a id='n4459' href='#n4459'>4459</a> <a id='n4460' href='#n4460'>4460</a> <a id='n4461' href='#n4461'>4461</a> <a id='n4462' href='#n4462'>4462</a> <a id='n4463' href='#n4463'>4463</a> <a id='n4464' href='#n4464'>4464</a> <a id='n4465' href='#n4465'>4465</a> <a id='n4466' href='#n4466'>4466</a> <a id='n4467' href='#n4467'>4467</a> <a id='n4468' href='#n4468'>4468</a> <a id='n4469' href='#n4469'>4469</a> <a id='n4470' href='#n4470'>4470</a> <a id='n4471' href='#n4471'>4471</a> <a id='n4472' href='#n4472'>4472</a> <a id='n4473' href='#n4473'>4473</a> <a id='n4474' href='#n4474'>4474</a> <a id='n4475' href='#n4475'>4475</a> <a id='n4476' href='#n4476'>4476</a> <a id='n4477' href='#n4477'>4477</a> <a id='n4478' href='#n4478'>4478</a> <a id='n4479' href='#n4479'>4479</a> <a id='n4480' href='#n4480'>4480</a> <a id='n4481' href='#n4481'>4481</a> <a id='n4482' href='#n4482'>4482</a> <a id='n4483' href='#n4483'>4483</a> <a id='n4484' href='#n4484'>4484</a> <a id='n4485' href='#n4485'>4485</a> <a id='n4486' href='#n4486'>4486</a> <a id='n4487' href='#n4487'>4487</a> <a id='n4488' href='#n4488'>4488</a> <a id='n4489' href='#n4489'>4489</a> <a id='n4490' href='#n4490'>4490</a> <a id='n4491' href='#n4491'>4491</a> <a id='n4492' href='#n4492'>4492</a> <a id='n4493' href='#n4493'>4493</a> <a id='n4494' href='#n4494'>4494</a> <a id='n4495' href='#n4495'>4495</a> <a id='n4496' href='#n4496'>4496</a> <a id='n4497' href='#n4497'>4497</a> <a id='n4498' href='#n4498'>4498</a> <a id='n4499' href='#n4499'>4499</a> <a id='n4500' href='#n4500'>4500</a> <a id='n4501' href='#n4501'>4501</a> <a id='n4502' href='#n4502'>4502</a> <a id='n4503' href='#n4503'>4503</a> <a id='n4504' href='#n4504'>4504</a> <a id='n4505' href='#n4505'>4505</a> <a id='n4506' href='#n4506'>4506</a> <a id='n4507' href='#n4507'>4507</a> <a id='n4508' href='#n4508'>4508</a> <a id='n4509' href='#n4509'>4509</a> <a id='n4510' href='#n4510'>4510</a> <a id='n4511' href='#n4511'>4511</a> <a id='n4512' href='#n4512'>4512</a> <a id='n4513' href='#n4513'>4513</a> <a id='n4514' href='#n4514'>4514</a> <a id='n4515' href='#n4515'>4515</a> <a id='n4516' href='#n4516'>4516</a> <a id='n4517' href='#n4517'>4517</a> <a id='n4518' href='#n4518'>4518</a> <a id='n4519' href='#n4519'>4519</a> <a id='n4520' href='#n4520'>4520</a> <a id='n4521' href='#n4521'>4521</a> <a id='n4522' href='#n4522'>4522</a> <a id='n4523' href='#n4523'>4523</a> <a id='n4524' href='#n4524'>4524</a> <a id='n4525' href='#n4525'>4525</a> <a id='n4526' href='#n4526'>4526</a> <a id='n4527' href='#n4527'>4527</a> <a id='n4528' href='#n4528'>4528</a> <a id='n4529' href='#n4529'>4529</a> <a id='n4530' href='#n4530'>4530</a> <a id='n4531' href='#n4531'>4531</a> <a id='n4532' href='#n4532'>4532</a> <a id='n4533' href='#n4533'>4533</a> <a id='n4534' href='#n4534'>4534</a> <a id='n4535' href='#n4535'>4535</a> <a id='n4536' href='#n4536'>4536</a> <a id='n4537' href='#n4537'>4537</a> <a id='n4538' href='#n4538'>4538</a> <a id='n4539' href='#n4539'>4539</a> <a id='n4540' href='#n4540'>4540</a> <a id='n4541' href='#n4541'>4541</a> <a id='n4542' href='#n4542'>4542</a> <a id='n4543' href='#n4543'>4543</a> <a id='n4544' href='#n4544'>4544</a> <a id='n4545' href='#n4545'>4545</a> <a id='n4546' href='#n4546'>4546</a> <a id='n4547' href='#n4547'>4547</a> <a id='n4548' href='#n4548'>4548</a> <a id='n4549' href='#n4549'>4549</a> <a id='n4550' href='#n4550'>4550</a> <a id='n4551' href='#n4551'>4551</a> <a id='n4552' href='#n4552'>4552</a> <a id='n4553' href='#n4553'>4553</a> <a id='n4554' href='#n4554'>4554</a> <a id='n4555' href='#n4555'>4555</a> <a id='n4556' href='#n4556'>4556</a> <a id='n4557' href='#n4557'>4557</a> <a id='n4558' href='#n4558'>4558</a> <a id='n4559' href='#n4559'>4559</a> <a id='n4560' href='#n4560'>4560</a> <a id='n4561' href='#n4561'>4561</a> <a id='n4562' href='#n4562'>4562</a> <a id='n4563' href='#n4563'>4563</a> <a id='n4564' href='#n4564'>4564</a> <a id='n4565' href='#n4565'>4565</a> <a id='n4566' href='#n4566'>4566</a> <a id='n4567' href='#n4567'>4567</a> <a id='n4568' href='#n4568'>4568</a> <a id='n4569' href='#n4569'>4569</a> <a id='n4570' href='#n4570'>4570</a> <a id='n4571' href='#n4571'>4571</a> <a id='n4572' href='#n4572'>4572</a> <a id='n4573' href='#n4573'>4573</a> <a id='n4574' href='#n4574'>4574</a> <a id='n4575' href='#n4575'>4575</a> <a id='n4576' href='#n4576'>4576</a> <a id='n4577' href='#n4577'>4577</a> <a id='n4578' href='#n4578'>4578</a> <a id='n4579' href='#n4579'>4579</a> <a id='n4580' href='#n4580'>4580</a> <a id='n4581' href='#n4581'>4581</a> <a id='n4582' href='#n4582'>4582</a> <a id='n4583' href='#n4583'>4583</a> <a id='n4584' href='#n4584'>4584</a> <a id='n4585' href='#n4585'>4585</a> <a id='n4586' href='#n4586'>4586</a> <a id='n4587' href='#n4587'>4587</a> <a id='n4588' href='#n4588'>4588</a> <a id='n4589' href='#n4589'>4589</a> <a id='n4590' href='#n4590'>4590</a> <a id='n4591' href='#n4591'>4591</a> <a id='n4592' href='#n4592'>4592</a> <a id='n4593' href='#n4593'>4593</a> <a id='n4594' href='#n4594'>4594</a> <a id='n4595' href='#n4595'>4595</a> <a id='n4596' href='#n4596'>4596</a> <a id='n4597' href='#n4597'>4597</a> <a id='n4598' href='#n4598'>4598</a> <a id='n4599' href='#n4599'>4599</a> <a id='n4600' href='#n4600'>4600</a> <a id='n4601' href='#n4601'>4601</a> <a id='n4602' href='#n4602'>4602</a> <a id='n4603' href='#n4603'>4603</a> <a id='n4604' href='#n4604'>4604</a> <a id='n4605' href='#n4605'>4605</a> <a id='n4606' href='#n4606'>4606</a> <a id='n4607' href='#n4607'>4607</a> <a id='n4608' href='#n4608'>4608</a> <a id='n4609' href='#n4609'>4609</a> <a id='n4610' href='#n4610'>4610</a> <a id='n4611' href='#n4611'>4611</a> <a id='n4612' href='#n4612'>4612</a> <a id='n4613' href='#n4613'>4613</a> <a id='n4614' href='#n4614'>4614</a> <a id='n4615' href='#n4615'>4615</a> <a id='n4616' href='#n4616'>4616</a> <a id='n4617' href='#n4617'>4617</a> <a id='n4618' href='#n4618'>4618</a> <a id='n4619' href='#n4619'>4619</a> <a id='n4620' href='#n4620'>4620</a> <a id='n4621' href='#n4621'>4621</a> <a id='n4622' href='#n4622'>4622</a> <a id='n4623' href='#n4623'>4623</a> <a id='n4624' href='#n4624'>4624</a> <a id='n4625' href='#n4625'>4625</a> <a id='n4626' href='#n4626'>4626</a> <a id='n4627' href='#n4627'>4627</a> <a id='n4628' href='#n4628'>4628</a> <a id='n4629' href='#n4629'>4629</a> <a id='n4630' href='#n4630'>4630</a> <a id='n4631' href='#n4631'>4631</a> <a id='n4632' href='#n4632'>4632</a> <a id='n4633' href='#n4633'>4633</a> <a id='n4634' href='#n4634'>4634</a> <a id='n4635' href='#n4635'>4635</a> <a id='n4636' href='#n4636'>4636</a> <a id='n4637' href='#n4637'>4637</a> <a id='n4638' href='#n4638'>4638</a> <a id='n4639' href='#n4639'>4639</a> <a id='n4640' href='#n4640'>4640</a> <a id='n4641' href='#n4641'>4641</a> <a id='n4642' href='#n4642'>4642</a> <a id='n4643' href='#n4643'>4643</a> <a id='n4644' href='#n4644'>4644</a> <a id='n4645' href='#n4645'>4645</a> <a id='n4646' href='#n4646'>4646</a> <a id='n4647' href='#n4647'>4647</a> <a id='n4648' href='#n4648'>4648</a> <a id='n4649' href='#n4649'>4649</a> <a id='n4650' href='#n4650'>4650</a> <a id='n4651' href='#n4651'>4651</a> <a id='n4652' href='#n4652'>4652</a> <a id='n4653' href='#n4653'>4653</a> <a id='n4654' href='#n4654'>4654</a> <a id='n4655' href='#n4655'>4655</a> <a id='n4656' href='#n4656'>4656</a> <a id='n4657' href='#n4657'>4657</a> <a id='n4658' href='#n4658'>4658</a> <a id='n4659' href='#n4659'>4659</a> <a id='n4660' href='#n4660'>4660</a> <a id='n4661' href='#n4661'>4661</a> <a id='n4662' href='#n4662'>4662</a> <a id='n4663' href='#n4663'>4663</a> <a id='n4664' href='#n4664'>4664</a> <a id='n4665' href='#n4665'>4665</a> <a id='n4666' href='#n4666'>4666</a> <a id='n4667' href='#n4667'>4667</a> <a id='n4668' href='#n4668'>4668</a> <a id='n4669' href='#n4669'>4669</a> <a id='n4670' href='#n4670'>4670</a> <a id='n4671' href='#n4671'>4671</a> <a id='n4672' href='#n4672'>4672</a> <a id='n4673' href='#n4673'>4673</a> <a id='n4674' href='#n4674'>4674</a> <a id='n4675' href='#n4675'>4675</a> <a id='n4676' href='#n4676'>4676</a> <a id='n4677' href='#n4677'>4677</a> <a id='n4678' href='#n4678'>4678</a> <a id='n4679' href='#n4679'>4679</a> <a id='n4680' href='#n4680'>4680</a> <a id='n4681' href='#n4681'>4681</a> <a id='n4682' href='#n4682'>4682</a> <a id='n4683' href='#n4683'>4683</a> <a id='n4684' href='#n4684'>4684</a> <a id='n4685' href='#n4685'>4685</a> <a id='n4686' href='#n4686'>4686</a> <a id='n4687' href='#n4687'>4687</a> <a id='n4688' href='#n4688'>4688</a> <a id='n4689' href='#n4689'>4689</a> <a id='n4690' href='#n4690'>4690</a> <a id='n4691' href='#n4691'>4691</a> <a id='n4692' href='#n4692'>4692</a> <a id='n4693' href='#n4693'>4693</a> <a id='n4694' href='#n4694'>4694</a> <a id='n4695' href='#n4695'>4695</a> <a id='n4696' href='#n4696'>4696</a> <a id='n4697' href='#n4697'>4697</a> <a id='n4698' href='#n4698'>4698</a> <a id='n4699' href='#n4699'>4699</a> <a id='n4700' href='#n4700'>4700</a> <a id='n4701' href='#n4701'>4701</a> <a id='n4702' href='#n4702'>4702</a> <a id='n4703' href='#n4703'>4703</a> <a id='n4704' href='#n4704'>4704</a> <a id='n4705' href='#n4705'>4705</a> <a id='n4706' href='#n4706'>4706</a> <a id='n4707' href='#n4707'>4707</a> <a id='n4708' href='#n4708'>4708</a> <a id='n4709' href='#n4709'>4709</a> <a id='n4710' href='#n4710'>4710</a> <a id='n4711' href='#n4711'>4711</a> <a id='n4712' href='#n4712'>4712</a> <a id='n4713' href='#n4713'>4713</a> <a id='n4714' href='#n4714'>4714</a> <a id='n4715' href='#n4715'>4715</a> <a id='n4716' href='#n4716'>4716</a> <a id='n4717' href='#n4717'>4717</a> <a id='n4718' href='#n4718'>4718</a> <a id='n4719' href='#n4719'>4719</a> <a id='n4720' href='#n4720'>4720</a> <a id='n4721' href='#n4721'>4721</a> <a id='n4722' href='#n4722'>4722</a> <a id='n4723' href='#n4723'>4723</a> <a id='n4724' href='#n4724'>4724</a> <a id='n4725' href='#n4725'>4725</a> <a id='n4726' href='#n4726'>4726</a> <a id='n4727' href='#n4727'>4727</a> <a id='n4728' href='#n4728'>4728</a> <a id='n4729' href='#n4729'>4729</a> <a id='n4730' href='#n4730'>4730</a> <a id='n4731' href='#n4731'>4731</a> <a id='n4732' href='#n4732'>4732</a> <a id='n4733' href='#n4733'>4733</a> <a id='n4734' href='#n4734'>4734</a> <a id='n4735' href='#n4735'>4735</a> <a id='n4736' href='#n4736'>4736</a> <a id='n4737' href='#n4737'>4737</a> <a id='n4738' href='#n4738'>4738</a> <a id='n4739' href='#n4739'>4739</a> <a id='n4740' href='#n4740'>4740</a> <a id='n4741' href='#n4741'>4741</a> <a id='n4742' href='#n4742'>4742</a> <a id='n4743' href='#n4743'>4743</a> <a id='n4744' href='#n4744'>4744</a> <a id='n4745' href='#n4745'>4745</a> <a id='n4746' href='#n4746'>4746</a> <a id='n4747' href='#n4747'>4747</a> <a id='n4748' href='#n4748'>4748</a> <a id='n4749' href='#n4749'>4749</a> <a id='n4750' href='#n4750'>4750</a> <a id='n4751' href='#n4751'>4751</a> <a id='n4752' href='#n4752'>4752</a> <a id='n4753' href='#n4753'>4753</a> <a id='n4754' href='#n4754'>4754</a> <a id='n4755' href='#n4755'>4755</a> <a id='n4756' href='#n4756'>4756</a> <a id='n4757' href='#n4757'>4757</a> <a id='n4758' href='#n4758'>4758</a> <a id='n4759' href='#n4759'>4759</a> <a id='n4760' href='#n4760'>4760</a> <a id='n4761' href='#n4761'>4761</a> <a id='n4762' href='#n4762'>4762</a> <a id='n4763' href='#n4763'>4763</a> <a id='n4764' href='#n4764'>4764</a> <a id='n4765' href='#n4765'>4765</a> <a id='n4766' href='#n4766'>4766</a> <a id='n4767' href='#n4767'>4767</a> <a id='n4768' href='#n4768'>4768</a> <a id='n4769' href='#n4769'>4769</a> <a id='n4770' href='#n4770'>4770</a> <a id='n4771' href='#n4771'>4771</a> <a id='n4772' href='#n4772'>4772</a> <a id='n4773' href='#n4773'>4773</a> <a id='n4774' href='#n4774'>4774</a> <a id='n4775' href='#n4775'>4775</a> <a id='n4776' href='#n4776'>4776</a> <a id='n4777' href='#n4777'>4777</a> <a id='n4778' href='#n4778'>4778</a> <a id='n4779' href='#n4779'>4779</a> <a id='n4780' href='#n4780'>4780</a> <a id='n4781' href='#n4781'>4781</a> <a id='n4782' href='#n4782'>4782</a> <a id='n4783' href='#n4783'>4783</a> <a id='n4784' href='#n4784'>4784</a> <a id='n4785' href='#n4785'>4785</a> <a id='n4786' href='#n4786'>4786</a> <a id='n4787' href='#n4787'>4787</a> <a id='n4788' href='#n4788'>4788</a> <a id='n4789' href='#n4789'>4789</a> <a id='n4790' href='#n4790'>4790</a> <a id='n4791' href='#n4791'>4791</a> <a id='n4792' href='#n4792'>4792</a> <a id='n4793' href='#n4793'>4793</a> <a id='n4794' href='#n4794'>4794</a> <a id='n4795' href='#n4795'>4795</a> <a id='n4796' href='#n4796'>4796</a> <a id='n4797' href='#n4797'>4797</a> <a id='n4798' href='#n4798'>4798</a> <a id='n4799' href='#n4799'>4799</a> <a id='n4800' href='#n4800'>4800</a> <a id='n4801' href='#n4801'>4801</a> <a id='n4802' href='#n4802'>4802</a> <a id='n4803' href='#n4803'>4803</a> <a id='n4804' href='#n4804'>4804</a> <a id='n4805' href='#n4805'>4805</a> <a id='n4806' href='#n4806'>4806</a> <a id='n4807' href='#n4807'>4807</a> <a id='n4808' href='#n4808'>4808</a> <a id='n4809' href='#n4809'>4809</a> <a id='n4810' href='#n4810'>4810</a> <a id='n4811' href='#n4811'>4811</a> <a id='n4812' href='#n4812'>4812</a> <a id='n4813' href='#n4813'>4813</a> <a id='n4814' href='#n4814'>4814</a> <a id='n4815' href='#n4815'>4815</a> <a id='n4816' href='#n4816'>4816</a> <a id='n4817' href='#n4817'>4817</a> <a id='n4818' href='#n4818'>4818</a> <a id='n4819' href='#n4819'>4819</a> <a id='n4820' href='#n4820'>4820</a> <a id='n4821' href='#n4821'>4821</a> <a id='n4822' href='#n4822'>4822</a> <a id='n4823' href='#n4823'>4823</a> <a id='n4824' href='#n4824'>4824</a> <a id='n4825' href='#n4825'>4825</a> <a id='n4826' href='#n4826'>4826</a> <a id='n4827' href='#n4827'>4827</a> <a id='n4828' href='#n4828'>4828</a> <a id='n4829' href='#n4829'>4829</a> <a id='n4830' href='#n4830'>4830</a> <a id='n4831' href='#n4831'>4831</a> <a id='n4832' href='#n4832'>4832</a> <a id='n4833' href='#n4833'>4833</a> <a id='n4834' href='#n4834'>4834</a> <a id='n4835' href='#n4835'>4835</a> <a id='n4836' href='#n4836'>4836</a> <a id='n4837' href='#n4837'>4837</a> <a id='n4838' href='#n4838'>4838</a> <a id='n4839' href='#n4839'>4839</a> <a id='n4840' href='#n4840'>4840</a> <a id='n4841' href='#n4841'>4841</a> <a id='n4842' href='#n4842'>4842</a> <a id='n4843' href='#n4843'>4843</a> <a id='n4844' href='#n4844'>4844</a> <a id='n4845' href='#n4845'>4845</a> <a id='n4846' href='#n4846'>4846</a> <a id='n4847' href='#n4847'>4847</a> <a id='n4848' href='#n4848'>4848</a> <a id='n4849' href='#n4849'>4849</a> <a id='n4850' href='#n4850'>4850</a> <a id='n4851' href='#n4851'>4851</a> <a id='n4852' href='#n4852'>4852</a> <a id='n4853' href='#n4853'>4853</a> <a id='n4854' href='#n4854'>4854</a> <a id='n4855' href='#n4855'>4855</a> <a id='n4856' href='#n4856'>4856</a> <a id='n4857' href='#n4857'>4857</a> <a id='n4858' href='#n4858'>4858</a> <a id='n4859' href='#n4859'>4859</a> <a id='n4860' href='#n4860'>4860</a> <a id='n4861' href='#n4861'>4861</a> <a id='n4862' href='#n4862'>4862</a> <a id='n4863' href='#n4863'>4863</a> <a id='n4864' href='#n4864'>4864</a> <a id='n4865' href='#n4865'>4865</a> <a id='n4866' href='#n4866'>4866</a> <a id='n4867' href='#n4867'>4867</a> <a id='n4868' href='#n4868'>4868</a> <a id='n4869' href='#n4869'>4869</a> <a id='n4870' href='#n4870'>4870</a> <a id='n4871' href='#n4871'>4871</a> <a id='n4872' href='#n4872'>4872</a> <a id='n4873' href='#n4873'>4873</a> <a id='n4874' href='#n4874'>4874</a> <a id='n4875' href='#n4875'>4875</a> <a id='n4876' href='#n4876'>4876</a> <a id='n4877' href='#n4877'>4877</a> <a id='n4878' href='#n4878'>4878</a> <a id='n4879' href='#n4879'>4879</a> <a id='n4880' href='#n4880'>4880</a> <a id='n4881' href='#n4881'>4881</a> <a id='n4882' href='#n4882'>4882</a> <a id='n4883' href='#n4883'>4883</a> <a id='n4884' href='#n4884'>4884</a> <a id='n4885' href='#n4885'>4885</a> <a id='n4886' href='#n4886'>4886</a> <a id='n4887' href='#n4887'>4887</a> <a id='n4888' href='#n4888'>4888</a> <a id='n4889' href='#n4889'>4889</a> <a id='n4890' href='#n4890'>4890</a> <a id='n4891' href='#n4891'>4891</a> <a id='n4892' href='#n4892'>4892</a> <a id='n4893' href='#n4893'>4893</a> <a id='n4894' href='#n4894'>4894</a> <a id='n4895' href='#n4895'>4895</a> <a id='n4896' href='#n4896'>4896</a> <a id='n4897' href='#n4897'>4897</a> <a id='n4898' href='#n4898'>4898</a> <a id='n4899' href='#n4899'>4899</a> <a id='n4900' href='#n4900'>4900</a> <a id='n4901' href='#n4901'>4901</a> <a id='n4902' href='#n4902'>4902</a> <a id='n4903' href='#n4903'>4903</a> <a id='n4904' href='#n4904'>4904</a> <a id='n4905' href='#n4905'>4905</a> <a id='n4906' href='#n4906'>4906</a> <a id='n4907' href='#n4907'>4907</a> <a id='n4908' href='#n4908'>4908</a> <a id='n4909' href='#n4909'>4909</a> <a id='n4910' href='#n4910'>4910</a> <a id='n4911' href='#n4911'>4911</a> <a id='n4912' href='#n4912'>4912</a> <a id='n4913' href='#n4913'>4913</a> <a id='n4914' href='#n4914'>4914</a> <a id='n4915' href='#n4915'>4915</a> <a id='n4916' href='#n4916'>4916</a> <a id='n4917' href='#n4917'>4917</a> <a id='n4918' href='#n4918'>4918</a> <a id='n4919' href='#n4919'>4919</a> <a id='n4920' href='#n4920'>4920</a> <a id='n4921' href='#n4921'>4921</a> <a id='n4922' href='#n4922'>4922</a> <a id='n4923' href='#n4923'>4923</a> <a id='n4924' href='#n4924'>4924</a> <a id='n4925' href='#n4925'>4925</a> <a id='n4926' href='#n4926'>4926</a> <a id='n4927' href='#n4927'>4927</a> <a id='n4928' href='#n4928'>4928</a> <a id='n4929' href='#n4929'>4929</a> <a id='n4930' href='#n4930'>4930</a> <a id='n4931' href='#n4931'>4931</a> <a id='n4932' href='#n4932'>4932</a> <a id='n4933' href='#n4933'>4933</a> <a id='n4934' href='#n4934'>4934</a> <a id='n4935' href='#n4935'>4935</a> <a id='n4936' href='#n4936'>4936</a> <a id='n4937' href='#n4937'>4937</a> <a id='n4938' href='#n4938'>4938</a> <a id='n4939' href='#n4939'>4939</a> <a id='n4940' href='#n4940'>4940</a> <a id='n4941' href='#n4941'>4941</a> <a id='n4942' href='#n4942'>4942</a> <a id='n4943' href='#n4943'>4943</a> <a id='n4944' href='#n4944'>4944</a> <a id='n4945' href='#n4945'>4945</a> <a id='n4946' href='#n4946'>4946</a> <a id='n4947' href='#n4947'>4947</a> <a id='n4948' href='#n4948'>4948</a> <a id='n4949' href='#n4949'>4949</a> <a id='n4950' href='#n4950'>4950</a> <a id='n4951' href='#n4951'>4951</a> <a id='n4952' href='#n4952'>4952</a> <a id='n4953' href='#n4953'>4953</a> <a id='n4954' href='#n4954'>4954</a> <a id='n4955' href='#n4955'>4955</a> <a id='n4956' href='#n4956'>4956</a> <a id='n4957' href='#n4957'>4957</a> <a id='n4958' href='#n4958'>4958</a> <a id='n4959' href='#n4959'>4959</a> <a id='n4960' href='#n4960'>4960</a> <a id='n4961' href='#n4961'>4961</a> <a id='n4962' href='#n4962'>4962</a> <a id='n4963' href='#n4963'>4963</a> <a id='n4964' href='#n4964'>4964</a> <a id='n4965' href='#n4965'>4965</a> <a id='n4966' href='#n4966'>4966</a> <a id='n4967' href='#n4967'>4967</a> <a id='n4968' href='#n4968'>4968</a> <a id='n4969' href='#n4969'>4969</a> <a id='n4970' href='#n4970'>4970</a> <a id='n4971' href='#n4971'>4971</a> <a id='n4972' href='#n4972'>4972</a> <a id='n4973' href='#n4973'>4973</a> <a id='n4974' href='#n4974'>4974</a> <a id='n4975' href='#n4975'>4975</a> <a id='n4976' href='#n4976'>4976</a> <a id='n4977' href='#n4977'>4977</a> <a id='n4978' href='#n4978'>4978</a> <a id='n4979' href='#n4979'>4979</a> <a id='n4980' href='#n4980'>4980</a> <a id='n4981' href='#n4981'>4981</a> <a id='n4982' href='#n4982'>4982</a> <a id='n4983' href='#n4983'>4983</a> <a id='n4984' href='#n4984'>4984</a> <a id='n4985' href='#n4985'>4985</a> <a id='n4986' href='#n4986'>4986</a> <a id='n4987' href='#n4987'>4987</a> <a id='n4988' href='#n4988'>4988</a> <a id='n4989' href='#n4989'>4989</a> <a id='n4990' href='#n4990'>4990</a> <a id='n4991' href='#n4991'>4991</a> <a id='n4992' href='#n4992'>4992</a> <a id='n4993' href='#n4993'>4993</a> <a id='n4994' href='#n4994'>4994</a> <a id='n4995' href='#n4995'>4995</a> <a id='n4996' href='#n4996'>4996</a> <a id='n4997' href='#n4997'>4997</a> <a id='n4998' href='#n4998'>4998</a> <a id='n4999' href='#n4999'>4999</a> <a id='n5000' href='#n5000'>5000</a> <a id='n5001' href='#n5001'>5001</a> <a id='n5002' href='#n5002'>5002</a> <a id='n5003' href='#n5003'>5003</a> <a id='n5004' href='#n5004'>5004</a> <a id='n5005' href='#n5005'>5005</a> <a id='n5006' href='#n5006'>5006</a> <a id='n5007' href='#n5007'>5007</a> <a id='n5008' href='#n5008'>5008</a> <a id='n5009' href='#n5009'>5009</a> <a id='n5010' href='#n5010'>5010</a> <a id='n5011' href='#n5011'>5011</a> <a id='n5012' href='#n5012'>5012</a> <a id='n5013' href='#n5013'>5013</a> <a id='n5014' href='#n5014'>5014</a> <a id='n5015' href='#n5015'>5015</a> <a id='n5016' href='#n5016'>5016</a> <a id='n5017' href='#n5017'>5017</a> <a id='n5018' href='#n5018'>5018</a> <a id='n5019' href='#n5019'>5019</a> <a id='n5020' href='#n5020'>5020</a> <a id='n5021' href='#n5021'>5021</a> <a id='n5022' href='#n5022'>5022</a> <a id='n5023' href='#n5023'>5023</a> <a id='n5024' href='#n5024'>5024</a> <a id='n5025' href='#n5025'>5025</a> <a id='n5026' href='#n5026'>5026</a> <a id='n5027' href='#n5027'>5027</a> <a id='n5028' href='#n5028'>5028</a> <a id='n5029' href='#n5029'>5029</a> <a id='n5030' href='#n5030'>5030</a> <a id='n5031' href='#n5031'>5031</a> <a id='n5032' href='#n5032'>5032</a> <a id='n5033' href='#n5033'>5033</a> <a id='n5034' href='#n5034'>5034</a> <a id='n5035' href='#n5035'>5035</a> <a id='n5036' href='#n5036'>5036</a> <a id='n5037' href='#n5037'>5037</a> <a id='n5038' href='#n5038'>5038</a> <a id='n5039' href='#n5039'>5039</a> <a id='n5040' href='#n5040'>5040</a> <a id='n5041' href='#n5041'>5041</a> <a id='n5042' href='#n5042'>5042</a> <a id='n5043' href='#n5043'>5043</a> <a id='n5044' href='#n5044'>5044</a> <a id='n5045' href='#n5045'>5045</a> <a id='n5046' href='#n5046'>5046</a> <a id='n5047' href='#n5047'>5047</a> <a id='n5048' href='#n5048'>5048</a> <a id='n5049' href='#n5049'>5049</a> <a id='n5050' href='#n5050'>5050</a> <a id='n5051' href='#n5051'>5051</a> <a id='n5052' href='#n5052'>5052</a> <a id='n5053' href='#n5053'>5053</a> <a id='n5054' href='#n5054'>5054</a> <a id='n5055' href='#n5055'>5055</a> <a id='n5056' href='#n5056'>5056</a> <a id='n5057' href='#n5057'>5057</a> <a id='n5058' href='#n5058'>5058</a> <a id='n5059' href='#n5059'>5059</a> <a id='n5060' href='#n5060'>5060</a> <a id='n5061' href='#n5061'>5061</a> <a id='n5062' href='#n5062'>5062</a> <a id='n5063' href='#n5063'>5063</a> <a id='n5064' href='#n5064'>5064</a> <a id='n5065' href='#n5065'>5065</a> <a id='n5066' href='#n5066'>5066</a> <a id='n5067' href='#n5067'>5067</a> <a id='n5068' href='#n5068'>5068</a> <a id='n5069' href='#n5069'>5069</a> <a id='n5070' href='#n5070'>5070</a> <a id='n5071' href='#n5071'>5071</a> <a id='n5072' href='#n5072'>5072</a> <a id='n5073' href='#n5073'>5073</a> <a id='n5074' href='#n5074'>5074</a> <a id='n5075' href='#n5075'>5075</a> <a id='n5076' href='#n5076'>5076</a> <a id='n5077' href='#n5077'>5077</a> <a id='n5078' href='#n5078'>5078</a> <a id='n5079' href='#n5079'>5079</a> <a id='n5080' href='#n5080'>5080</a> <a id='n5081' href='#n5081'>5081</a> <a id='n5082' href='#n5082'>5082</a> <a id='n5083' href='#n5083'>5083</a> <a id='n5084' href='#n5084'>5084</a> <a id='n5085' href='#n5085'>5085</a> <a id='n5086' href='#n5086'>5086</a> <a id='n5087' href='#n5087'>5087</a> <a id='n5088' href='#n5088'>5088</a> <a id='n5089' href='#n5089'>5089</a> <a id='n5090' href='#n5090'>5090</a> <a id='n5091' href='#n5091'>5091</a> <a id='n5092' href='#n5092'>5092</a> <a id='n5093' href='#n5093'>5093</a> <a id='n5094' href='#n5094'>5094</a> <a id='n5095' href='#n5095'>5095</a> <a id='n5096' href='#n5096'>5096</a> <a id='n5097' href='#n5097'>5097</a> <a id='n5098' href='#n5098'>5098</a> <a id='n5099' href='#n5099'>5099</a> <a id='n5100' href='#n5100'>5100</a> <a id='n5101' href='#n5101'>5101</a> <a id='n5102' href='#n5102'>5102</a> <a id='n5103' href='#n5103'>5103</a> <a id='n5104' href='#n5104'>5104</a> <a id='n5105' href='#n5105'>5105</a> <a id='n5106' href='#n5106'>5106</a> <a id='n5107' href='#n5107'>5107</a> <a id='n5108' href='#n5108'>5108</a> <a id='n5109' href='#n5109'>5109</a> <a id='n5110' href='#n5110'>5110</a> <a id='n5111' href='#n5111'>5111</a> <a id='n5112' href='#n5112'>5112</a> <a id='n5113' href='#n5113'>5113</a> <a id='n5114' href='#n5114'>5114</a> <a id='n5115' href='#n5115'>5115</a> <a id='n5116' href='#n5116'>5116</a> <a id='n5117' href='#n5117'>5117</a> <a id='n5118' href='#n5118'>5118</a> <a id='n5119' href='#n5119'>5119</a> <a id='n5120' href='#n5120'>5120</a> <a id='n5121' href='#n5121'>5121</a> <a id='n5122' href='#n5122'>5122</a> <a id='n5123' href='#n5123'>5123</a> <a id='n5124' href='#n5124'>5124</a> <a id='n5125' href='#n5125'>5125</a> <a id='n5126' href='#n5126'>5126</a> <a id='n5127' href='#n5127'>5127</a> <a id='n5128' href='#n5128'>5128</a> <a id='n5129' href='#n5129'>5129</a> <a id='n5130' href='#n5130'>5130</a> <a id='n5131' href='#n5131'>5131</a> <a id='n5132' href='#n5132'>5132</a> <a id='n5133' href='#n5133'>5133</a> <a id='n5134' href='#n5134'>5134</a> <a id='n5135' href='#n5135'>5135</a> <a id='n5136' href='#n5136'>5136</a> <a id='n5137' href='#n5137'>5137</a> <a id='n5138' href='#n5138'>5138</a> <a id='n5139' href='#n5139'>5139</a> <a id='n5140' href='#n5140'>5140</a> <a id='n5141' href='#n5141'>5141</a> <a id='n5142' href='#n5142'>5142</a> <a id='n5143' href='#n5143'>5143</a> <a id='n5144' href='#n5144'>5144</a> <a id='n5145' href='#n5145'>5145</a> <a id='n5146' href='#n5146'>5146</a> <a id='n5147' href='#n5147'>5147</a> <a id='n5148' href='#n5148'>5148</a> <a id='n5149' href='#n5149'>5149</a> <a id='n5150' href='#n5150'>5150</a> <a id='n5151' href='#n5151'>5151</a> <a id='n5152' href='#n5152'>5152</a> <a id='n5153' href='#n5153'>5153</a> <a id='n5154' href='#n5154'>5154</a> <a id='n5155' href='#n5155'>5155</a> <a id='n5156' href='#n5156'>5156</a> <a id='n5157' href='#n5157'>5157</a> <a id='n5158' href='#n5158'>5158</a> <a id='n5159' href='#n5159'>5159</a> <a id='n5160' href='#n5160'>5160</a> <a id='n5161' href='#n5161'>5161</a> <a id='n5162' href='#n5162'>5162</a> <a id='n5163' href='#n5163'>5163</a> <a id='n5164' href='#n5164'>5164</a> <a id='n5165' href='#n5165'>5165</a> <a id='n5166' href='#n5166'>5166</a> <a id='n5167' href='#n5167'>5167</a> <a id='n5168' href='#n5168'>5168</a> <a id='n5169' href='#n5169'>5169</a> <a id='n5170' href='#n5170'>5170</a> <a id='n5171' href='#n5171'>5171</a> <a id='n5172' href='#n5172'>5172</a> <a id='n5173' href='#n5173'>5173</a> <a id='n5174' href='#n5174'>5174</a> <a id='n5175' href='#n5175'>5175</a> <a id='n5176' href='#n5176'>5176</a> <a id='n5177' href='#n5177'>5177</a> <a id='n5178' href='#n5178'>5178</a> <a id='n5179' href='#n5179'>5179</a> <a id='n5180' href='#n5180'>5180</a> <a id='n5181' href='#n5181'>5181</a> <a id='n5182' href='#n5182'>5182</a> <a id='n5183' href='#n5183'>5183</a> <a id='n5184' href='#n5184'>5184</a> <a id='n5185' href='#n5185'>5185</a> <a id='n5186' href='#n5186'>5186</a> <a id='n5187' href='#n5187'>5187</a> <a id='n5188' href='#n5188'>5188</a> <a id='n5189' href='#n5189'>5189</a> <a id='n5190' href='#n5190'>5190</a> <a id='n5191' href='#n5191'>5191</a> <a id='n5192' href='#n5192'>5192</a> <a id='n5193' href='#n5193'>5193</a> <a id='n5194' href='#n5194'>5194</a> <a id='n5195' href='#n5195'>5195</a> <a id='n5196' href='#n5196'>5196</a> <a id='n5197' href='#n5197'>5197</a> <a id='n5198' href='#n5198'>5198</a> <a id='n5199' href='#n5199'>5199</a> <a id='n5200' href='#n5200'>5200</a> <a id='n5201' href='#n5201'>5201</a> <a id='n5202' href='#n5202'>5202</a> <a id='n5203' href='#n5203'>5203</a> <a id='n5204' href='#n5204'>5204</a> <a id='n5205' href='#n5205'>5205</a> <a id='n5206' href='#n5206'>5206</a> <a id='n5207' href='#n5207'>5207</a> <a id='n5208' href='#n5208'>5208</a> <a id='n5209' href='#n5209'>5209</a> <a id='n5210' href='#n5210'>5210</a> <a id='n5211' href='#n5211'>5211</a> <a id='n5212' href='#n5212'>5212</a> <a id='n5213' href='#n5213'>5213</a> <a id='n5214' href='#n5214'>5214</a> <a id='n5215' href='#n5215'>5215</a> <a id='n5216' href='#n5216'>5216</a> <a id='n5217' href='#n5217'>5217</a> <a id='n5218' href='#n5218'>5218</a> <a id='n5219' href='#n5219'>5219</a> <a id='n5220' href='#n5220'>5220</a> <a id='n5221' href='#n5221'>5221</a> <a id='n5222' href='#n5222'>5222</a> <a id='n5223' href='#n5223'>5223</a> <a id='n5224' href='#n5224'>5224</a> <a id='n5225' href='#n5225'>5225</a> <a id='n5226' href='#n5226'>5226</a> <a id='n5227' href='#n5227'>5227</a> <a id='n5228' href='#n5228'>5228</a> <a id='n5229' href='#n5229'>5229</a> <a id='n5230' href='#n5230'>5230</a> <a id='n5231' href='#n5231'>5231</a> <a id='n5232' href='#n5232'>5232</a> <a id='n5233' href='#n5233'>5233</a> <a id='n5234' href='#n5234'>5234</a> <a id='n5235' href='#n5235'>5235</a> <a id='n5236' href='#n5236'>5236</a> <a id='n5237' href='#n5237'>5237</a> <a id='n5238' href='#n5238'>5238</a> <a id='n5239' href='#n5239'>5239</a> <a id='n5240' href='#n5240'>5240</a> <a id='n5241' href='#n5241'>5241</a> <a id='n5242' href='#n5242'>5242</a> <a id='n5243' href='#n5243'>5243</a> <a id='n5244' href='#n5244'>5244</a> <a id='n5245' href='#n5245'>5245</a> <a id='n5246' href='#n5246'>5246</a> <a id='n5247' href='#n5247'>5247</a> <a id='n5248' href='#n5248'>5248</a> <a id='n5249' href='#n5249'>5249</a> <a id='n5250' href='#n5250'>5250</a> <a id='n5251' href='#n5251'>5251</a> <a id='n5252' href='#n5252'>5252</a> <a id='n5253' href='#n5253'>5253</a> <a id='n5254' href='#n5254'>5254</a> <a id='n5255' href='#n5255'>5255</a> <a id='n5256' href='#n5256'>5256</a> <a id='n5257' href='#n5257'>5257</a> <a id='n5258' href='#n5258'>5258</a> <a id='n5259' href='#n5259'>5259</a> <a id='n5260' href='#n5260'>5260</a> <a id='n5261' href='#n5261'>5261</a> <a id='n5262' href='#n5262'>5262</a> <a id='n5263' href='#n5263'>5263</a> <a id='n5264' href='#n5264'>5264</a> <a id='n5265' href='#n5265'>5265</a> <a id='n5266' href='#n5266'>5266</a> <a id='n5267' href='#n5267'>5267</a> <a id='n5268' href='#n5268'>5268</a> <a id='n5269' href='#n5269'>5269</a> <a id='n5270' href='#n5270'>5270</a> <a id='n5271' href='#n5271'>5271</a> <a id='n5272' href='#n5272'>5272</a> <a id='n5273' href='#n5273'>5273</a> <a id='n5274' href='#n5274'>5274</a> <a id='n5275' href='#n5275'>5275</a> <a id='n5276' href='#n5276'>5276</a> <a id='n5277' href='#n5277'>5277</a> <a id='n5278' href='#n5278'>5278</a> <a id='n5279' href='#n5279'>5279</a> <a id='n5280' href='#n5280'>5280</a> <a id='n5281' href='#n5281'>5281</a> <a id='n5282' href='#n5282'>5282</a> <a id='n5283' href='#n5283'>5283</a> <a id='n5284' href='#n5284'>5284</a> <a id='n5285' href='#n5285'>5285</a> <a id='n5286' href='#n5286'>5286</a> <a id='n5287' href='#n5287'>5287</a> <a id='n5288' href='#n5288'>5288</a> <a id='n5289' href='#n5289'>5289</a> <a id='n5290' href='#n5290'>5290</a> <a id='n5291' href='#n5291'>5291</a> <a id='n5292' href='#n5292'>5292</a> <a id='n5293' href='#n5293'>5293</a> <a id='n5294' href='#n5294'>5294</a> <a id='n5295' href='#n5295'>5295</a> <a id='n5296' href='#n5296'>5296</a> <a id='n5297' href='#n5297'>5297</a> <a id='n5298' href='#n5298'>5298</a> <a id='n5299' href='#n5299'>5299</a> <a id='n5300' href='#n5300'>5300</a> <a id='n5301' href='#n5301'>5301</a> <a id='n5302' href='#n5302'>5302</a> <a id='n5303' href='#n5303'>5303</a> <a id='n5304' href='#n5304'>5304</a> <a id='n5305' href='#n5305'>5305</a> <a id='n5306' href='#n5306'>5306</a> <a id='n5307' href='#n5307'>5307</a> <a id='n5308' href='#n5308'>5308</a> <a id='n5309' href='#n5309'>5309</a> <a id='n5310' href='#n5310'>5310</a> <a id='n5311' href='#n5311'>5311</a> <a id='n5312' href='#n5312'>5312</a> <a id='n5313' href='#n5313'>5313</a> <a id='n5314' href='#n5314'>5314</a> <a id='n5315' href='#n5315'>5315</a> <a id='n5316' href='#n5316'>5316</a> <a id='n5317' href='#n5317'>5317</a> <a id='n5318' href='#n5318'>5318</a> <a id='n5319' href='#n5319'>5319</a> <a id='n5320' href='#n5320'>5320</a> <a id='n5321' href='#n5321'>5321</a> <a id='n5322' href='#n5322'>5322</a> <a id='n5323' href='#n5323'>5323</a> <a id='n5324' href='#n5324'>5324</a> <a id='n5325' href='#n5325'>5325</a> <a id='n5326' href='#n5326'>5326</a> <a id='n5327' href='#n5327'>5327</a> <a id='n5328' href='#n5328'>5328</a> <a id='n5329' href='#n5329'>5329</a> <a id='n5330' href='#n5330'>5330</a> <a id='n5331' href='#n5331'>5331</a> <a id='n5332' href='#n5332'>5332</a> <a id='n5333' href='#n5333'>5333</a> <a id='n5334' href='#n5334'>5334</a> <a id='n5335' href='#n5335'>5335</a> <a id='n5336' href='#n5336'>5336</a> <a id='n5337' href='#n5337'>5337</a> <a id='n5338' href='#n5338'>5338</a> <a id='n5339' href='#n5339'>5339</a> <a id='n5340' href='#n5340'>5340</a> <a id='n5341' href='#n5341'>5341</a> <a id='n5342' href='#n5342'>5342</a> <a id='n5343' href='#n5343'>5343</a> <a id='n5344' href='#n5344'>5344</a> <a id='n5345' href='#n5345'>5345</a> <a id='n5346' href='#n5346'>5346</a> <a id='n5347' href='#n5347'>5347</a> <a id='n5348' href='#n5348'>5348</a> <a id='n5349' href='#n5349'>5349</a> <a id='n5350' href='#n5350'>5350</a> <a id='n5351' href='#n5351'>5351</a> <a id='n5352' href='#n5352'>5352</a> <a id='n5353' href='#n5353'>5353</a> <a id='n5354' href='#n5354'>5354</a> <a id='n5355' href='#n5355'>5355</a> <a id='n5356' href='#n5356'>5356</a> <a id='n5357' href='#n5357'>5357</a> <a id='n5358' href='#n5358'>5358</a> <a id='n5359' href='#n5359'>5359</a> <a id='n5360' href='#n5360'>5360</a> <a id='n5361' href='#n5361'>5361</a> <a id='n5362' href='#n5362'>5362</a> <a id='n5363' href='#n5363'>5363</a> <a id='n5364' href='#n5364'>5364</a> <a id='n5365' href='#n5365'>5365</a> <a id='n5366' href='#n5366'>5366</a> <a id='n5367' href='#n5367'>5367</a> <a id='n5368' href='#n5368'>5368</a> <a id='n5369' href='#n5369'>5369</a> <a id='n5370' href='#n5370'>5370</a> <a id='n5371' href='#n5371'>5371</a> <a id='n5372' href='#n5372'>5372</a> <a id='n5373' href='#n5373'>5373</a> <a id='n5374' href='#n5374'>5374</a> <a id='n5375' href='#n5375'>5375</a> <a id='n5376' href='#n5376'>5376</a> <a id='n5377' href='#n5377'>5377</a> <a id='n5378' href='#n5378'>5378</a> <a id='n5379' href='#n5379'>5379</a> <a id='n5380' href='#n5380'>5380</a> <a id='n5381' href='#n5381'>5381</a> <a id='n5382' href='#n5382'>5382</a> <a id='n5383' href='#n5383'>5383</a> <a id='n5384' href='#n5384'>5384</a> <a id='n5385' href='#n5385'>5385</a> <a id='n5386' href='#n5386'>5386</a> <a id='n5387' href='#n5387'>5387</a> <a id='n5388' href='#n5388'>5388</a> <a id='n5389' href='#n5389'>5389</a> <a id='n5390' href='#n5390'>5390</a> <a id='n5391' href='#n5391'>5391</a> <a id='n5392' href='#n5392'>5392</a> <a id='n5393' href='#n5393'>5393</a> <a id='n5394' href='#n5394'>5394</a> <a id='n5395' href='#n5395'>5395</a> <a id='n5396' href='#n5396'>5396</a> <a id='n5397' href='#n5397'>5397</a> <a id='n5398' href='#n5398'>5398</a> <a id='n5399' href='#n5399'>5399</a> <a id='n5400' href='#n5400'>5400</a> <a id='n5401' href='#n5401'>5401</a> <a id='n5402' href='#n5402'>5402</a> <a id='n5403' href='#n5403'>5403</a> <a id='n5404' href='#n5404'>5404</a> <a id='n5405' href='#n5405'>5405</a> <a id='n5406' href='#n5406'>5406</a> <a id='n5407' href='#n5407'>5407</a> <a id='n5408' href='#n5408'>5408</a> <a id='n5409' href='#n5409'>5409</a> <a id='n5410' href='#n5410'>5410</a> <a id='n5411' href='#n5411'>5411</a> <a id='n5412' href='#n5412'>5412</a> <a id='n5413' href='#n5413'>5413</a> <a id='n5414' href='#n5414'>5414</a> <a id='n5415' href='#n5415'>5415</a> <a id='n5416' href='#n5416'>5416</a> <a id='n5417' href='#n5417'>5417</a> <a id='n5418' href='#n5418'>5418</a> <a id='n5419' href='#n5419'>5419</a> <a id='n5420' href='#n5420'>5420</a> <a id='n5421' href='#n5421'>5421</a> <a id='n5422' href='#n5422'>5422</a> <a id='n5423' href='#n5423'>5423</a> <a id='n5424' href='#n5424'>5424</a> <a id='n5425' href='#n5425'>5425</a> <a id='n5426' href='#n5426'>5426</a> <a id='n5427' href='#n5427'>5427</a> <a id='n5428' href='#n5428'>5428</a> <a id='n5429' href='#n5429'>5429</a> <a id='n5430' href='#n5430'>5430</a> <a id='n5431' href='#n5431'>5431</a> <a id='n5432' href='#n5432'>5432</a> <a id='n5433' href='#n5433'>5433</a> <a id='n5434' href='#n5434'>5434</a> <a id='n5435' href='#n5435'>5435</a> <a id='n5436' href='#n5436'>5436</a> <a id='n5437' href='#n5437'>5437</a> <a id='n5438' href='#n5438'>5438</a> <a id='n5439' href='#n5439'>5439</a> <a id='n5440' href='#n5440'>5440</a> <a id='n5441' href='#n5441'>5441</a> <a id='n5442' href='#n5442'>5442</a> <a id='n5443' href='#n5443'>5443</a> <a id='n5444' href='#n5444'>5444</a> <a id='n5445' href='#n5445'>5445</a> <a id='n5446' href='#n5446'>5446</a> <a id='n5447' href='#n5447'>5447</a> <a id='n5448' href='#n5448'>5448</a> <a id='n5449' href='#n5449'>5449</a> <a id='n5450' href='#n5450'>5450</a> <a id='n5451' href='#n5451'>5451</a> <a id='n5452' href='#n5452'>5452</a> <a id='n5453' href='#n5453'>5453</a> <a id='n5454' href='#n5454'>5454</a> <a id='n5455' href='#n5455'>5455</a> <a id='n5456' href='#n5456'>5456</a> <a id='n5457' href='#n5457'>5457</a> <a id='n5458' href='#n5458'>5458</a> <a id='n5459' href='#n5459'>5459</a> <a id='n5460' href='#n5460'>5460</a> <a id='n5461' href='#n5461'>5461</a> <a id='n5462' href='#n5462'>5462</a> <a id='n5463' href='#n5463'>5463</a> <a id='n5464' href='#n5464'>5464</a> <a id='n5465' href='#n5465'>5465</a> <a id='n5466' href='#n5466'>5466</a> <a id='n5467' href='#n5467'>5467</a> <a id='n5468' href='#n5468'>5468</a> <a id='n5469' href='#n5469'>5469</a> <a id='n5470' href='#n5470'>5470</a> <a id='n5471' href='#n5471'>5471</a> <a id='n5472' href='#n5472'>5472</a> <a id='n5473' href='#n5473'>5473</a> <a id='n5474' href='#n5474'>5474</a> <a id='n5475' href='#n5475'>5475</a> <a id='n5476' href='#n5476'>5476</a> <a id='n5477' href='#n5477'>5477</a> <a id='n5478' href='#n5478'>5478</a> <a id='n5479' href='#n5479'>5479</a> <a id='n5480' href='#n5480'>5480</a> <a id='n5481' href='#n5481'>5481</a> <a id='n5482' href='#n5482'>5482</a> <a id='n5483' href='#n5483'>5483</a> <a id='n5484' href='#n5484'>5484</a> <a id='n5485' href='#n5485'>5485</a> <a id='n5486' href='#n5486'>5486</a> <a id='n5487' href='#n5487'>5487</a> <a id='n5488' href='#n5488'>5488</a> <a id='n5489' href='#n5489'>5489</a> <a id='n5490' href='#n5490'>5490</a> <a id='n5491' href='#n5491'>5491</a> <a id='n5492' href='#n5492'>5492</a> <a id='n5493' href='#n5493'>5493</a> <a id='n5494' href='#n5494'>5494</a> <a id='n5495' href='#n5495'>5495</a> <a id='n5496' href='#n5496'>5496</a> <a id='n5497' href='#n5497'>5497</a> <a id='n5498' href='#n5498'>5498</a> <a id='n5499' href='#n5499'>5499</a> <a id='n5500' href='#n5500'>5500</a> <a id='n5501' href='#n5501'>5501</a> <a id='n5502' href='#n5502'>5502</a> <a id='n5503' href='#n5503'>5503</a> <a id='n5504' href='#n5504'>5504</a> <a id='n5505' href='#n5505'>5505</a> <a id='n5506' href='#n5506'>5506</a> <a id='n5507' href='#n5507'>5507</a> <a id='n5508' href='#n5508'>5508</a> <a id='n5509' href='#n5509'>5509</a> <a id='n5510' href='#n5510'>5510</a> <a id='n5511' href='#n5511'>5511</a> <a id='n5512' href='#n5512'>5512</a> <a id='n5513' href='#n5513'>5513</a> <a id='n5514' href='#n5514'>5514</a> <a id='n5515' href='#n5515'>5515</a> <a id='n5516' href='#n5516'>5516</a> <a id='n5517' href='#n5517'>5517</a> <a id='n5518' href='#n5518'>5518</a> <a id='n5519' href='#n5519'>5519</a> <a id='n5520' href='#n5520'>5520</a> <a id='n5521' href='#n5521'>5521</a> <a id='n5522' href='#n5522'>5522</a> <a id='n5523' href='#n5523'>5523</a> <a id='n5524' href='#n5524'>5524</a> <a id='n5525' href='#n5525'>5525</a> <a id='n5526' href='#n5526'>5526</a> <a id='n5527' href='#n5527'>5527</a> <a id='n5528' href='#n5528'>5528</a> <a id='n5529' href='#n5529'>5529</a> <a id='n5530' href='#n5530'>5530</a> <a id='n5531' href='#n5531'>5531</a> <a id='n5532' href='#n5532'>5532</a> <a id='n5533' href='#n5533'>5533</a> <a id='n5534' href='#n5534'>5534</a> <a id='n5535' href='#n5535'>5535</a> <a id='n5536' href='#n5536'>5536</a> <a id='n5537' href='#n5537'>5537</a> <a id='n5538' href='#n5538'>5538</a> <a id='n5539' href='#n5539'>5539</a> <a id='n5540' href='#n5540'>5540</a> <a id='n5541' href='#n5541'>5541</a> <a id='n5542' href='#n5542'>5542</a> <a id='n5543' href='#n5543'>5543</a> <a id='n5544' href='#n5544'>5544</a> <a id='n5545' href='#n5545'>5545</a> <a id='n5546' href='#n5546'>5546</a> <a id='n5547' href='#n5547'>5547</a> <a id='n5548' href='#n5548'>5548</a> <a id='n5549' href='#n5549'>5549</a> <a id='n5550' href='#n5550'>5550</a> <a id='n5551' href='#n5551'>5551</a> <a id='n5552' href='#n5552'>5552</a> <a id='n5553' href='#n5553'>5553</a> <a id='n5554' href='#n5554'>5554</a> <a id='n5555' href='#n5555'>5555</a> <a id='n5556' href='#n5556'>5556</a> <a id='n5557' href='#n5557'>5557</a> <a id='n5558' href='#n5558'>5558</a> <a id='n5559' href='#n5559'>5559</a> <a id='n5560' href='#n5560'>5560</a> <a id='n5561' href='#n5561'>5561</a> <a id='n5562' href='#n5562'>5562</a> <a id='n5563' href='#n5563'>5563</a> <a id='n5564' href='#n5564'>5564</a> <a id='n5565' href='#n5565'>5565</a> <a id='n5566' href='#n5566'>5566</a> <a id='n5567' href='#n5567'>5567</a> <a id='n5568' href='#n5568'>5568</a> <a id='n5569' href='#n5569'>5569</a> <a id='n5570' href='#n5570'>5570</a> <a id='n5571' href='#n5571'>5571</a> <a id='n5572' href='#n5572'>5572</a> <a id='n5573' href='#n5573'>5573</a> <a id='n5574' href='#n5574'>5574</a> <a id='n5575' href='#n5575'>5575</a> <a id='n5576' href='#n5576'>5576</a> <a id='n5577' href='#n5577'>5577</a> <a id='n5578' href='#n5578'>5578</a> <a id='n5579' href='#n5579'>5579</a> <a id='n5580' href='#n5580'>5580</a> <a id='n5581' href='#n5581'>5581</a> <a id='n5582' href='#n5582'>5582</a> <a id='n5583' href='#n5583'>5583</a> <a id='n5584' href='#n5584'>5584</a> <a id='n5585' href='#n5585'>5585</a> <a id='n5586' href='#n5586'>5586</a> <a id='n5587' href='#n5587'>5587</a> <a id='n5588' href='#n5588'>5588</a> <a id='n5589' href='#n5589'>5589</a> <a id='n5590' href='#n5590'>5590</a> <a id='n5591' href='#n5591'>5591</a> <a id='n5592' href='#n5592'>5592</a> <a id='n5593' href='#n5593'>5593</a> <a id='n5594' href='#n5594'>5594</a> <a id='n5595' href='#n5595'>5595</a> <a id='n5596' href='#n5596'>5596</a> <a id='n5597' href='#n5597'>5597</a> <a id='n5598' href='#n5598'>5598</a> <a id='n5599' href='#n5599'>5599</a> <a id='n5600' href='#n5600'>5600</a> <a id='n5601' href='#n5601'>5601</a> <a id='n5602' href='#n5602'>5602</a> <a id='n5603' href='#n5603'>5603</a> <a id='n5604' href='#n5604'>5604</a> <a id='n5605' href='#n5605'>5605</a> <a id='n5606' href='#n5606'>5606</a> <a id='n5607' href='#n5607'>5607</a> <a id='n5608' href='#n5608'>5608</a> <a id='n5609' href='#n5609'>5609</a> <a id='n5610' href='#n5610'>5610</a> <a id='n5611' href='#n5611'>5611</a> <a id='n5612' href='#n5612'>5612</a> <a id='n5613' href='#n5613'>5613</a> <a id='n5614' href='#n5614'>5614</a> <a id='n5615' href='#n5615'>5615</a> <a id='n5616' href='#n5616'>5616</a> <a id='n5617' href='#n5617'>5617</a> <a id='n5618' href='#n5618'>5618</a> <a id='n5619' href='#n5619'>5619</a> <a id='n5620' href='#n5620'>5620</a> <a id='n5621' href='#n5621'>5621</a> <a id='n5622' href='#n5622'>5622</a> <a id='n5623' href='#n5623'>5623</a> <a id='n5624' href='#n5624'>5624</a> <a id='n5625' href='#n5625'>5625</a> <a id='n5626' href='#n5626'>5626</a> <a id='n5627' href='#n5627'>5627</a> <a id='n5628' href='#n5628'>5628</a> <a id='n5629' href='#n5629'>5629</a> <a id='n5630' href='#n5630'>5630</a> <a id='n5631' href='#n5631'>5631</a> <a id='n5632' href='#n5632'>5632</a> <a id='n5633' href='#n5633'>5633</a> <a id='n5634' href='#n5634'>5634</a> <a id='n5635' href='#n5635'>5635</a> <a id='n5636' href='#n5636'>5636</a> <a id='n5637' href='#n5637'>5637</a> <a id='n5638' href='#n5638'>5638</a> <a id='n5639' href='#n5639'>5639</a> <a id='n5640' href='#n5640'>5640</a> <a id='n5641' href='#n5641'>5641</a> <a id='n5642' href='#n5642'>5642</a> <a id='n5643' href='#n5643'>5643</a> <a id='n5644' href='#n5644'>5644</a> <a id='n5645' href='#n5645'>5645</a> <a id='n5646' href='#n5646'>5646</a> <a id='n5647' href='#n5647'>5647</a> <a id='n5648' href='#n5648'>5648</a> <a id='n5649' href='#n5649'>5649</a> <a id='n5650' href='#n5650'>5650</a> <a id='n5651' href='#n5651'>5651</a> <a id='n5652' href='#n5652'>5652</a> <a id='n5653' href='#n5653'>5653</a> <a id='n5654' href='#n5654'>5654</a> <a id='n5655' href='#n5655'>5655</a> <a id='n5656' href='#n5656'>5656</a> <a id='n5657' href='#n5657'>5657</a> <a id='n5658' href='#n5658'>5658</a> <a id='n5659' href='#n5659'>5659</a> <a id='n5660' href='#n5660'>5660</a> <a id='n5661' href='#n5661'>5661</a> <a id='n5662' href='#n5662'>5662</a> <a id='n5663' href='#n5663'>5663</a> <a id='n5664' href='#n5664'>5664</a> <a id='n5665' href='#n5665'>5665</a> <a id='n5666' href='#n5666'>5666</a> <a id='n5667' href='#n5667'>5667</a> <a id='n5668' href='#n5668'>5668</a> <a id='n5669' href='#n5669'>5669</a> <a id='n5670' href='#n5670'>5670</a> <a id='n5671' href='#n5671'>5671</a> <a id='n5672' href='#n5672'>5672</a> <a id='n5673' href='#n5673'>5673</a> <a id='n5674' href='#n5674'>5674</a> <a id='n5675' href='#n5675'>5675</a> <a id='n5676' href='#n5676'>5676</a> <a id='n5677' href='#n5677'>5677</a> <a id='n5678' href='#n5678'>5678</a> <a id='n5679' href='#n5679'>5679</a> <a id='n5680' href='#n5680'>5680</a> <a id='n5681' href='#n5681'>5681</a> <a id='n5682' href='#n5682'>5682</a> <a id='n5683' href='#n5683'>5683</a> <a id='n5684' href='#n5684'>5684</a> <a id='n5685' href='#n5685'>5685</a> <a id='n5686' href='#n5686'>5686</a> <a id='n5687' href='#n5687'>5687</a> <a id='n5688' href='#n5688'>5688</a> <a id='n5689' href='#n5689'>5689</a> <a id='n5690' href='#n5690'>5690</a> <a id='n5691' href='#n5691'>5691</a> <a id='n5692' href='#n5692'>5692</a> <a id='n5693' href='#n5693'>5693</a> <a id='n5694' href='#n5694'>5694</a> <a id='n5695' href='#n5695'>5695</a> <a id='n5696' href='#n5696'>5696</a> <a id='n5697' href='#n5697'>5697</a> <a id='n5698' href='#n5698'>5698</a> <a id='n5699' href='#n5699'>5699</a> <a id='n5700' href='#n5700'>5700</a> <a id='n5701' href='#n5701'>5701</a> <a id='n5702' href='#n5702'>5702</a> <a id='n5703' href='#n5703'>5703</a> <a id='n5704' href='#n5704'>5704</a> <a id='n5705' href='#n5705'>5705</a> <a id='n5706' href='#n5706'>5706</a> <a id='n5707' href='#n5707'>5707</a> <a id='n5708' href='#n5708'>5708</a> <a id='n5709' href='#n5709'>5709</a> <a id='n5710' href='#n5710'>5710</a> <a id='n5711' href='#n5711'>5711</a> <a id='n5712' href='#n5712'>5712</a> <a id='n5713' href='#n5713'>5713</a> <a id='n5714' href='#n5714'>5714</a> <a id='n5715' href='#n5715'>5715</a> <a id='n5716' href='#n5716'>5716</a> <a id='n5717' href='#n5717'>5717</a> <a id='n5718' href='#n5718'>5718</a> <a id='n5719' href='#n5719'>5719</a> <a id='n5720' href='#n5720'>5720</a> <a id='n5721' href='#n5721'>5721</a> <a id='n5722' href='#n5722'>5722</a> <a id='n5723' href='#n5723'>5723</a> <a id='n5724' href='#n5724'>5724</a> <a id='n5725' href='#n5725'>5725</a> <a id='n5726' href='#n5726'>5726</a> <a id='n5727' href='#n5727'>5727</a> <a id='n5728' href='#n5728'>5728</a> <a id='n5729' href='#n5729'>5729</a> <a id='n5730' href='#n5730'>5730</a> <a id='n5731' href='#n5731'>5731</a> <a id='n5732' href='#n5732'>5732</a> <a id='n5733' href='#n5733'>5733</a> <a id='n5734' href='#n5734'>5734</a> <a id='n5735' href='#n5735'>5735</a> <a id='n5736' href='#n5736'>5736</a> <a id='n5737' href='#n5737'>5737</a> <a id='n5738' href='#n5738'>5738</a> <a id='n5739' href='#n5739'>5739</a> <a id='n5740' href='#n5740'>5740</a> <a id='n5741' href='#n5741'>5741</a> <a id='n5742' href='#n5742'>5742</a> <a id='n5743' href='#n5743'>5743</a> <a id='n5744' href='#n5744'>5744</a> <a id='n5745' href='#n5745'>5745</a> <a id='n5746' href='#n5746'>5746</a> <a id='n5747' href='#n5747'>5747</a> <a id='n5748' href='#n5748'>5748</a> <a id='n5749' href='#n5749'>5749</a> <a id='n5750' href='#n5750'>5750</a> <a id='n5751' href='#n5751'>5751</a> <a id='n5752' href='#n5752'>5752</a> <a id='n5753' href='#n5753'>5753</a> <a id='n5754' href='#n5754'>5754</a> <a id='n5755' href='#n5755'>5755</a> <a id='n5756' href='#n5756'>5756</a> <a id='n5757' href='#n5757'>5757</a> <a id='n5758' href='#n5758'>5758</a> <a id='n5759' href='#n5759'>5759</a> <a id='n5760' href='#n5760'>5760</a> <a id='n5761' href='#n5761'>5761</a> <a id='n5762' href='#n5762'>5762</a> <a id='n5763' href='#n5763'>5763</a> <a id='n5764' href='#n5764'>5764</a> <a id='n5765' href='#n5765'>5765</a> <a id='n5766' href='#n5766'>5766</a> <a id='n5767' href='#n5767'>5767</a> <a id='n5768' href='#n5768'>5768</a> <a id='n5769' href='#n5769'>5769</a> <a id='n5770' href='#n5770'>5770</a> <a id='n5771' href='#n5771'>5771</a> <a id='n5772' href='#n5772'>5772</a> <a id='n5773' href='#n5773'>5773</a> <a id='n5774' href='#n5774'>5774</a> <a id='n5775' href='#n5775'>5775</a> <a id='n5776' href='#n5776'>5776</a> <a id='n5777' href='#n5777'>5777</a> <a id='n5778' href='#n5778'>5778</a> <a id='n5779' href='#n5779'>5779</a> <a id='n5780' href='#n5780'>5780</a> <a id='n5781' href='#n5781'>5781</a> <a id='n5782' href='#n5782'>5782</a> <a id='n5783' href='#n5783'>5783</a> <a id='n5784' href='#n5784'>5784</a> <a id='n5785' href='#n5785'>5785</a> <a id='n5786' href='#n5786'>5786</a> <a id='n5787' href='#n5787'>5787</a> <a id='n5788' href='#n5788'>5788</a> <a id='n5789' href='#n5789'>5789</a> <a id='n5790' href='#n5790'>5790</a> <a id='n5791' href='#n5791'>5791</a> <a id='n5792' href='#n5792'>5792</a> <a id='n5793' href='#n5793'>5793</a> <a id='n5794' href='#n5794'>5794</a> <a id='n5795' href='#n5795'>5795</a> <a id='n5796' href='#n5796'>5796</a> <a id='n5797' href='#n5797'>5797</a> <a id='n5798' href='#n5798'>5798</a> <a id='n5799' href='#n5799'>5799</a> <a id='n5800' href='#n5800'>5800</a> <a id='n5801' href='#n5801'>5801</a> <a id='n5802' href='#n5802'>5802</a> <a id='n5803' href='#n5803'>5803</a> <a id='n5804' href='#n5804'>5804</a> <a id='n5805' href='#n5805'>5805</a> <a id='n5806' href='#n5806'>5806</a> <a id='n5807' href='#n5807'>5807</a> <a id='n5808' href='#n5808'>5808</a> <a id='n5809' href='#n5809'>5809</a> <a id='n5810' href='#n5810'>5810</a> <a id='n5811' href='#n5811'>5811</a> <a id='n5812' href='#n5812'>5812</a> <a id='n5813' href='#n5813'>5813</a> <a id='n5814' href='#n5814'>5814</a> <a id='n5815' href='#n5815'>5815</a> <a id='n5816' href='#n5816'>5816</a> <a id='n5817' href='#n5817'>5817</a> <a id='n5818' href='#n5818'>5818</a> <a id='n5819' href='#n5819'>5819</a> <a id='n5820' href='#n5820'>5820</a> <a id='n5821' href='#n5821'>5821</a> <a id='n5822' href='#n5822'>5822</a> <a id='n5823' href='#n5823'>5823</a> <a id='n5824' href='#n5824'>5824</a> <a id='n5825' href='#n5825'>5825</a> <a id='n5826' href='#n5826'>5826</a> <a id='n5827' href='#n5827'>5827</a> <a id='n5828' href='#n5828'>5828</a> <a id='n5829' href='#n5829'>5829</a> <a id='n5830' href='#n5830'>5830</a> <a id='n5831' href='#n5831'>5831</a> <a id='n5832' href='#n5832'>5832</a> <a id='n5833' href='#n5833'>5833</a> <a id='n5834' href='#n5834'>5834</a> <a id='n5835' href='#n5835'>5835</a> <a id='n5836' href='#n5836'>5836</a> <a id='n5837' href='#n5837'>5837</a> <a id='n5838' href='#n5838'>5838</a> <a id='n5839' href='#n5839'>5839</a> <a id='n5840' href='#n5840'>5840</a> <a id='n5841' href='#n5841'>5841</a> <a id='n5842' href='#n5842'>5842</a> <a id='n5843' href='#n5843'>5843</a> <a id='n5844' href='#n5844'>5844</a> <a id='n5845' href='#n5845'>5845</a> <a id='n5846' href='#n5846'>5846</a> <a id='n5847' href='#n5847'>5847</a> <a id='n5848' href='#n5848'>5848</a> <a id='n5849' href='#n5849'>5849</a> <a id='n5850' href='#n5850'>5850</a> <a id='n5851' href='#n5851'>5851</a> <a id='n5852' href='#n5852'>5852</a> <a id='n5853' href='#n5853'>5853</a> <a id='n5854' href='#n5854'>5854</a> <a id='n5855' href='#n5855'>5855</a> <a id='n5856' href='#n5856'>5856</a> <a id='n5857' href='#n5857'>5857</a> <a id='n5858' href='#n5858'>5858</a> <a id='n5859' href='#n5859'>5859</a> <a id='n5860' href='#n5860'>5860</a> <a id='n5861' href='#n5861'>5861</a> <a id='n5862' href='#n5862'>5862</a> <a id='n5863' href='#n5863'>5863</a> <a id='n5864' href='#n5864'>5864</a> <a id='n5865' href='#n5865'>5865</a> <a id='n5866' href='#n5866'>5866</a> <a id='n5867' href='#n5867'>5867</a> <a id='n5868' href='#n5868'>5868</a> <a id='n5869' href='#n5869'>5869</a> <a id='n5870' href='#n5870'>5870</a> <a id='n5871' href='#n5871'>5871</a> <a id='n5872' href='#n5872'>5872</a> <a id='n5873' href='#n5873'>5873</a> <a id='n5874' href='#n5874'>5874</a> <a id='n5875' href='#n5875'>5875</a> <a id='n5876' href='#n5876'>5876</a> <a id='n5877' href='#n5877'>5877</a> <a id='n5878' href='#n5878'>5878</a> <a id='n5879' href='#n5879'>5879</a> <a id='n5880' href='#n5880'>5880</a> <a id='n5881' href='#n5881'>5881</a> <a id='n5882' href='#n5882'>5882</a> <a id='n5883' href='#n5883'>5883</a> <a id='n5884' href='#n5884'>5884</a> <a id='n5885' href='#n5885'>5885</a> <a id='n5886' href='#n5886'>5886</a> <a id='n5887' href='#n5887'>5887</a> <a id='n5888' href='#n5888'>5888</a> <a id='n5889' href='#n5889'>5889</a> <a id='n5890' href='#n5890'>5890</a> <a id='n5891' href='#n5891'>5891</a> <a id='n5892' href='#n5892'>5892</a> <a id='n5893' href='#n5893'>5893</a> <a id='n5894' href='#n5894'>5894</a> <a id='n5895' href='#n5895'>5895</a> <a id='n5896' href='#n5896'>5896</a> <a id='n5897' href='#n5897'>5897</a> <a id='n5898' href='#n5898'>5898</a> <a id='n5899' href='#n5899'>5899</a> <a id='n5900' href='#n5900'>5900</a> <a id='n5901' href='#n5901'>5901</a> <a id='n5902' href='#n5902'>5902</a> <a id='n5903' href='#n5903'>5903</a> <a id='n5904' href='#n5904'>5904</a> <a id='n5905' href='#n5905'>5905</a> <a id='n5906' href='#n5906'>5906</a> <a id='n5907' href='#n5907'>5907</a> <a id='n5908' href='#n5908'>5908</a> <a id='n5909' href='#n5909'>5909</a> <a id='n5910' href='#n5910'>5910</a> <a id='n5911' href='#n5911'>5911</a> <a id='n5912' href='#n5912'>5912</a> <a id='n5913' href='#n5913'>5913</a> <a id='n5914' href='#n5914'>5914</a> <a id='n5915' href='#n5915'>5915</a> <a id='n5916' href='#n5916'>5916</a> <a id='n5917' href='#n5917'>5917</a> <a id='n5918' href='#n5918'>5918</a> <a id='n5919' href='#n5919'>5919</a> <a id='n5920' href='#n5920'>5920</a> <a id='n5921' href='#n5921'>5921</a> <a id='n5922' href='#n5922'>5922</a> <a id='n5923' href='#n5923'>5923</a> <a id='n5924' href='#n5924'>5924</a> <a id='n5925' href='#n5925'>5925</a> <a id='n5926' href='#n5926'>5926</a> <a id='n5927' href='#n5927'>5927</a> <a id='n5928' href='#n5928'>5928</a> <a id='n5929' href='#n5929'>5929</a> <a id='n5930' href='#n5930'>5930</a> <a id='n5931' href='#n5931'>5931</a> <a id='n5932' href='#n5932'>5932</a> <a id='n5933' href='#n5933'>5933</a> <a id='n5934' href='#n5934'>5934</a> <a id='n5935' href='#n5935'>5935</a> <a id='n5936' href='#n5936'>5936</a> <a id='n5937' href='#n5937'>5937</a> <a id='n5938' href='#n5938'>5938</a> <a id='n5939' href='#n5939'>5939</a> <a id='n5940' href='#n5940'>5940</a> <a id='n5941' href='#n5941'>5941</a> <a id='n5942' href='#n5942'>5942</a> <a id='n5943' href='#n5943'>5943</a> <a id='n5944' href='#n5944'>5944</a> <a id='n5945' href='#n5945'>5945</a> <a id='n5946' href='#n5946'>5946</a> <a id='n5947' href='#n5947'>5947</a> <a id='n5948' href='#n5948'>5948</a> <a id='n5949' href='#n5949'>5949</a> <a id='n5950' href='#n5950'>5950</a> <a id='n5951' href='#n5951'>5951</a> <a id='n5952' href='#n5952'>5952</a> <a id='n5953' href='#n5953'>5953</a> <a id='n5954' href='#n5954'>5954</a> <a id='n5955' href='#n5955'>5955</a> <a id='n5956' href='#n5956'>5956</a> <a id='n5957' href='#n5957'>5957</a> <a id='n5958' href='#n5958'>5958</a> <a id='n5959' href='#n5959'>5959</a> <a id='n5960' href='#n5960'>5960</a> <a id='n5961' href='#n5961'>5961</a> <a id='n5962' href='#n5962'>5962</a> <a id='n5963' href='#n5963'>5963</a> <a id='n5964' href='#n5964'>5964</a> <a id='n5965' href='#n5965'>5965</a> <a id='n5966' href='#n5966'>5966</a> <a id='n5967' href='#n5967'>5967</a> <a id='n5968' href='#n5968'>5968</a> <a id='n5969' href='#n5969'>5969</a> <a id='n5970' href='#n5970'>5970</a> <a id='n5971' href='#n5971'>5971</a> <a id='n5972' href='#n5972'>5972</a> <a id='n5973' href='#n5973'>5973</a> <a id='n5974' href='#n5974'>5974</a> <a id='n5975' href='#n5975'>5975</a> <a id='n5976' href='#n5976'>5976</a> <a id='n5977' href='#n5977'>5977</a> <a id='n5978' href='#n5978'>5978</a> <a id='n5979' href='#n5979'>5979</a> <a id='n5980' href='#n5980'>5980</a> <a id='n5981' href='#n5981'>5981</a> <a id='n5982' href='#n5982'>5982</a> <a id='n5983' href='#n5983'>5983</a> <a id='n5984' href='#n5984'>5984</a> <a id='n5985' href='#n5985'>5985</a> <a id='n5986' href='#n5986'>5986</a> <a id='n5987' href='#n5987'>5987</a> <a id='n5988' href='#n5988'>5988</a> <a id='n5989' href='#n5989'>5989</a> <a id='n5990' href='#n5990'>5990</a> <a id='n5991' href='#n5991'>5991</a> <a id='n5992' href='#n5992'>5992</a> <a id='n5993' href='#n5993'>5993</a> <a id='n5994' href='#n5994'>5994</a> <a id='n5995' href='#n5995'>5995</a> <a id='n5996' href='#n5996'>5996</a> <a id='n5997' href='#n5997'>5997</a> <a id='n5998' href='#n5998'>5998</a> <a id='n5999' href='#n5999'>5999</a> <a id='n6000' href='#n6000'>6000</a> <a id='n6001' href='#n6001'>6001</a> <a id='n6002' href='#n6002'>6002</a> <a id='n6003' href='#n6003'>6003</a> <a id='n6004' href='#n6004'>6004</a> <a id='n6005' href='#n6005'>6005</a> <a id='n6006' href='#n6006'>6006</a> <a id='n6007' href='#n6007'>6007</a> <a id='n6008' href='#n6008'>6008</a> <a id='n6009' href='#n6009'>6009</a> <a id='n6010' href='#n6010'>6010</a> <a id='n6011' href='#n6011'>6011</a> <a id='n6012' href='#n6012'>6012</a> <a id='n6013' href='#n6013'>6013</a> <a id='n6014' href='#n6014'>6014</a> <a id='n6015' href='#n6015'>6015</a> <a id='n6016' href='#n6016'>6016</a> <a id='n6017' href='#n6017'>6017</a> <a id='n6018' href='#n6018'>6018</a> <a id='n6019' href='#n6019'>6019</a> <a id='n6020' href='#n6020'>6020</a> <a id='n6021' href='#n6021'>6021</a> <a id='n6022' href='#n6022'>6022</a> <a id='n6023' href='#n6023'>6023</a> <a id='n6024' href='#n6024'>6024</a> <a id='n6025' href='#n6025'>6025</a> <a id='n6026' href='#n6026'>6026</a> <a id='n6027' href='#n6027'>6027</a> <a id='n6028' href='#n6028'>6028</a> <a id='n6029' href='#n6029'>6029</a> <a id='n6030' href='#n6030'>6030</a> <a id='n6031' href='#n6031'>6031</a> <a id='n6032' href='#n6032'>6032</a> <a id='n6033' href='#n6033'>6033</a> <a id='n6034' href='#n6034'>6034</a> <a id='n6035' href='#n6035'>6035</a> <a id='n6036' href='#n6036'>6036</a> <a id='n6037' href='#n6037'>6037</a> <a id='n6038' href='#n6038'>6038</a> <a id='n6039' href='#n6039'>6039</a> <a id='n6040' href='#n6040'>6040</a> <a id='n6041' href='#n6041'>6041</a> <a id='n6042' href='#n6042'>6042</a> <a id='n6043' href='#n6043'>6043</a> <a id='n6044' href='#n6044'>6044</a> <a id='n6045' href='#n6045'>6045</a> <a id='n6046' href='#n6046'>6046</a> <a id='n6047' href='#n6047'>6047</a> <a id='n6048' href='#n6048'>6048</a> <a id='n6049' href='#n6049'>6049</a> <a id='n6050' href='#n6050'>6050</a> <a id='n6051' href='#n6051'>6051</a> <a id='n6052' href='#n6052'>6052</a> <a id='n6053' href='#n6053'>6053</a> <a id='n6054' href='#n6054'>6054</a> <a id='n6055' href='#n6055'>6055</a> <a id='n6056' href='#n6056'>6056</a> <a id='n6057' href='#n6057'>6057</a> <a id='n6058' href='#n6058'>6058</a> <a id='n6059' href='#n6059'>6059</a> <a id='n6060' href='#n6060'>6060</a> <a id='n6061' href='#n6061'>6061</a> <a id='n6062' href='#n6062'>6062</a> <a id='n6063' href='#n6063'>6063</a> <a id='n6064' href='#n6064'>6064</a> <a id='n6065' href='#n6065'>6065</a> <a id='n6066' href='#n6066'>6066</a> <a id='n6067' href='#n6067'>6067</a> <a id='n6068' href='#n6068'>6068</a> <a id='n6069' href='#n6069'>6069</a> <a id='n6070' href='#n6070'>6070</a> <a id='n6071' href='#n6071'>6071</a> <a id='n6072' href='#n6072'>6072</a> <a id='n6073' href='#n6073'>6073</a> <a id='n6074' href='#n6074'>6074</a> <a id='n6075' href='#n6075'>6075</a> <a id='n6076' href='#n6076'>6076</a> <a id='n6077' href='#n6077'>6077</a> <a id='n6078' href='#n6078'>6078</a> <a id='n6079' href='#n6079'>6079</a> <a id='n6080' href='#n6080'>6080</a> <a id='n6081' href='#n6081'>6081</a> <a id='n6082' href='#n6082'>6082</a> <a id='n6083' href='#n6083'>6083</a> <a id='n6084' href='#n6084'>6084</a> <a id='n6085' href='#n6085'>6085</a> <a id='n6086' href='#n6086'>6086</a> <a id='n6087' href='#n6087'>6087</a> <a id='n6088' href='#n6088'>6088</a> <a id='n6089' href='#n6089'>6089</a> <a id='n6090' href='#n6090'>6090</a> <a id='n6091' href='#n6091'>6091</a> <a id='n6092' href='#n6092'>6092</a> <a id='n6093' href='#n6093'>6093</a> <a id='n6094' href='#n6094'>6094</a> <a id='n6095' href='#n6095'>6095</a> <a id='n6096' href='#n6096'>6096</a> <a id='n6097' href='#n6097'>6097</a> <a id='n6098' href='#n6098'>6098</a> <a id='n6099' href='#n6099'>6099</a> <a id='n6100' href='#n6100'>6100</a> <a id='n6101' href='#n6101'>6101</a> <a id='n6102' href='#n6102'>6102</a> <a id='n6103' href='#n6103'>6103</a> <a id='n6104' href='#n6104'>6104</a> <a id='n6105' href='#n6105'>6105</a> <a id='n6106' href='#n6106'>6106</a> <a id='n6107' href='#n6107'>6107</a> <a id='n6108' href='#n6108'>6108</a> <a id='n6109' href='#n6109'>6109</a> <a id='n6110' href='#n6110'>6110</a> <a id='n6111' href='#n6111'>6111</a> <a id='n6112' href='#n6112'>6112</a> <a id='n6113' href='#n6113'>6113</a> <a id='n6114' href='#n6114'>6114</a> <a id='n6115' href='#n6115'>6115</a> <a id='n6116' href='#n6116'>6116</a> <a id='n6117' href='#n6117'>6117</a> <a id='n6118' href='#n6118'>6118</a> <a id='n6119' href='#n6119'>6119</a> <a id='n6120' href='#n6120'>6120</a> <a id='n6121' href='#n6121'>6121</a> <a id='n6122' href='#n6122'>6122</a> <a id='n6123' href='#n6123'>6123</a> <a id='n6124' href='#n6124'>6124</a> <a id='n6125' href='#n6125'>6125</a> <a id='n6126' href='#n6126'>6126</a> <a id='n6127' href='#n6127'>6127</a> <a id='n6128' href='#n6128'>6128</a> <a id='n6129' href='#n6129'>6129</a> <a id='n6130' href='#n6130'>6130</a> <a id='n6131' href='#n6131'>6131</a> <a id='n6132' href='#n6132'>6132</a> <a id='n6133' href='#n6133'>6133</a> <a id='n6134' href='#n6134'>6134</a> <a id='n6135' href='#n6135'>6135</a> <a id='n6136' href='#n6136'>6136</a> <a id='n6137' href='#n6137'>6137</a> <a id='n6138' href='#n6138'>6138</a> <a id='n6139' href='#n6139'>6139</a> <a id='n6140' href='#n6140'>6140</a> <a id='n6141' href='#n6141'>6141</a> <a id='n6142' href='#n6142'>6142</a> <a id='n6143' href='#n6143'>6143</a> <a id='n6144' href='#n6144'>6144</a> <a id='n6145' href='#n6145'>6145</a> <a id='n6146' href='#n6146'>6146</a> <a id='n6147' href='#n6147'>6147</a> <a id='n6148' href='#n6148'>6148</a> <a id='n6149' href='#n6149'>6149</a> <a id='n6150' href='#n6150'>6150</a> <a id='n6151' href='#n6151'>6151</a> <a id='n6152' href='#n6152'>6152</a> <a id='n6153' href='#n6153'>6153</a> <a id='n6154' href='#n6154'>6154</a> <a id='n6155' href='#n6155'>6155</a> <a id='n6156' href='#n6156'>6156</a> <a id='n6157' href='#n6157'>6157</a> <a id='n6158' href='#n6158'>6158</a> <a id='n6159' href='#n6159'>6159</a> <a id='n6160' href='#n6160'>6160</a> <a id='n6161' href='#n6161'>6161</a> <a id='n6162' href='#n6162'>6162</a> <a id='n6163' href='#n6163'>6163</a> <a id='n6164' href='#n6164'>6164</a> <a id='n6165' href='#n6165'>6165</a> <a id='n6166' href='#n6166'>6166</a> <a id='n6167' href='#n6167'>6167</a> <a id='n6168' href='#n6168'>6168</a> <a id='n6169' href='#n6169'>6169</a> <a id='n6170' href='#n6170'>6170</a> <a id='n6171' href='#n6171'>6171</a> <a id='n6172' href='#n6172'>6172</a> <a id='n6173' href='#n6173'>6173</a> <a id='n6174' href='#n6174'>6174</a> <a id='n6175' href='#n6175'>6175</a> <a id='n6176' href='#n6176'>6176</a> <a id='n6177' href='#n6177'>6177</a> <a id='n6178' href='#n6178'>6178</a> <a id='n6179' href='#n6179'>6179</a> <a id='n6180' href='#n6180'>6180</a> <a id='n6181' href='#n6181'>6181</a> <a id='n6182' href='#n6182'>6182</a> <a id='n6183' href='#n6183'>6183</a> <a id='n6184' href='#n6184'>6184</a> <a id='n6185' href='#n6185'>6185</a> <a id='n6186' href='#n6186'>6186</a> <a id='n6187' href='#n6187'>6187</a> <a id='n6188' href='#n6188'>6188</a> <a id='n6189' href='#n6189'>6189</a> <a id='n6190' href='#n6190'>6190</a> <a id='n6191' href='#n6191'>6191</a> <a id='n6192' href='#n6192'>6192</a> <a id='n6193' href='#n6193'>6193</a> <a id='n6194' href='#n6194'>6194</a> <a id='n6195' href='#n6195'>6195</a> <a id='n6196' href='#n6196'>6196</a> <a id='n6197' href='#n6197'>6197</a> <a id='n6198' href='#n6198'>6198</a> <a id='n6199' href='#n6199'>6199</a> <a id='n6200' href='#n6200'>6200</a> <a id='n6201' href='#n6201'>6201</a> <a id='n6202' href='#n6202'>6202</a> <a id='n6203' href='#n6203'>6203</a> <a id='n6204' href='#n6204'>6204</a> <a id='n6205' href='#n6205'>6205</a> <a id='n6206' href='#n6206'>6206</a> <a id='n6207' href='#n6207'>6207</a> <a id='n6208' href='#n6208'>6208</a> <a id='n6209' href='#n6209'>6209</a> <a id='n6210' href='#n6210'>6210</a> <a id='n6211' href='#n6211'>6211</a> <a id='n6212' href='#n6212'>6212</a> <a id='n6213' href='#n6213'>6213</a> <a id='n6214' href='#n6214'>6214</a> <a id='n6215' href='#n6215'>6215</a> <a id='n6216' href='#n6216'>6216</a> <a id='n6217' href='#n6217'>6217</a> <a id='n6218' href='#n6218'>6218</a> <a id='n6219' href='#n6219'>6219</a> <a id='n6220' href='#n6220'>6220</a> <a id='n6221' href='#n6221'>6221</a> <a id='n6222' href='#n6222'>6222</a> <a id='n6223' href='#n6223'>6223</a> <a id='n6224' href='#n6224'>6224</a> <a id='n6225' href='#n6225'>6225</a> <a id='n6226' href='#n6226'>6226</a> <a id='n6227' href='#n6227'>6227</a> <a id='n6228' href='#n6228'>6228</a> <a id='n6229' href='#n6229'>6229</a> <a id='n6230' href='#n6230'>6230</a> <a id='n6231' href='#n6231'>6231</a> <a id='n6232' href='#n6232'>6232</a> <a id='n6233' href='#n6233'>6233</a> <a id='n6234' href='#n6234'>6234</a> <a id='n6235' href='#n6235'>6235</a> <a id='n6236' href='#n6236'>6236</a> <a id='n6237' href='#n6237'>6237</a> <a id='n6238' href='#n6238'>6238</a> <a id='n6239' href='#n6239'>6239</a> <a id='n6240' href='#n6240'>6240</a> <a id='n6241' href='#n6241'>6241</a> <a id='n6242' href='#n6242'>6242</a> <a id='n6243' href='#n6243'>6243</a> <a id='n6244' href='#n6244'>6244</a> <a id='n6245' href='#n6245'>6245</a> <a id='n6246' href='#n6246'>6246</a> <a id='n6247' href='#n6247'>6247</a> <a id='n6248' href='#n6248'>6248</a> <a id='n6249' href='#n6249'>6249</a> <a id='n6250' href='#n6250'>6250</a> <a id='n6251' href='#n6251'>6251</a> <a id='n6252' href='#n6252'>6252</a> <a id='n6253' href='#n6253'>6253</a> <a id='n6254' href='#n6254'>6254</a> <a id='n6255' href='#n6255'>6255</a> <a id='n6256' href='#n6256'>6256</a> <a id='n6257' href='#n6257'>6257</a> <a id='n6258' href='#n6258'>6258</a> <a id='n6259' href='#n6259'>6259</a> <a id='n6260' href='#n6260'>6260</a> <a id='n6261' href='#n6261'>6261</a> <a id='n6262' href='#n6262'>6262</a> <a id='n6263' href='#n6263'>6263</a> <a id='n6264' href='#n6264'>6264</a> <a id='n6265' href='#n6265'>6265</a> <a id='n6266' href='#n6266'>6266</a> <a id='n6267' href='#n6267'>6267</a> <a id='n6268' href='#n6268'>6268</a> <a id='n6269' href='#n6269'>6269</a> <a id='n6270' href='#n6270'>6270</a> <a id='n6271' href='#n6271'>6271</a> <a id='n6272' href='#n6272'>6272</a> <a id='n6273' href='#n6273'>6273</a> <a id='n6274' href='#n6274'>6274</a> <a id='n6275' href='#n6275'>6275</a> <a id='n6276' href='#n6276'>6276</a> <a id='n6277' href='#n6277'>6277</a> <a id='n6278' href='#n6278'>6278</a> <a id='n6279' href='#n6279'>6279</a> <a id='n6280' href='#n6280'>6280</a> <a id='n6281' href='#n6281'>6281</a> <a id='n6282' href='#n6282'>6282</a> <a id='n6283' href='#n6283'>6283</a> <a id='n6284' href='#n6284'>6284</a> <a id='n6285' href='#n6285'>6285</a> <a id='n6286' href='#n6286'>6286</a> <a id='n6287' href='#n6287'>6287</a> <a id='n6288' href='#n6288'>6288</a> <a id='n6289' href='#n6289'>6289</a> <a id='n6290' href='#n6290'>6290</a> <a id='n6291' href='#n6291'>6291</a> <a id='n6292' href='#n6292'>6292</a> <a id='n6293' href='#n6293'>6293</a> <a id='n6294' href='#n6294'>6294</a> <a id='n6295' href='#n6295'>6295</a> <a id='n6296' href='#n6296'>6296</a> <a id='n6297' href='#n6297'>6297</a> <a id='n6298' href='#n6298'>6298</a> <a id='n6299' href='#n6299'>6299</a> <a id='n6300' href='#n6300'>6300</a> <a id='n6301' href='#n6301'>6301</a> <a id='n6302' href='#n6302'>6302</a> <a id='n6303' href='#n6303'>6303</a> <a id='n6304' href='#n6304'>6304</a> <a id='n6305' href='#n6305'>6305</a> <a id='n6306' href='#n6306'>6306</a> <a id='n6307' href='#n6307'>6307</a> <a id='n6308' href='#n6308'>6308</a> <a id='n6309' href='#n6309'>6309</a> <a id='n6310' href='#n6310'>6310</a> <a id='n6311' href='#n6311'>6311</a> <a id='n6312' href='#n6312'>6312</a> <a id='n6313' href='#n6313'>6313</a> <a id='n6314' href='#n6314'>6314</a> <a id='n6315' href='#n6315'>6315</a> <a id='n6316' href='#n6316'>6316</a> <a id='n6317' href='#n6317'>6317</a> <a id='n6318' href='#n6318'>6318</a> <a id='n6319' href='#n6319'>6319</a> <a id='n6320' href='#n6320'>6320</a> <a id='n6321' href='#n6321'>6321</a> <a id='n6322' href='#n6322'>6322</a> <a id='n6323' href='#n6323'>6323</a> <a id='n6324' href='#n6324'>6324</a> <a id='n6325' href='#n6325'>6325</a> <a id='n6326' href='#n6326'>6326</a> <a id='n6327' href='#n6327'>6327</a> <a id='n6328' href='#n6328'>6328</a> <a id='n6329' href='#n6329'>6329</a> <a id='n6330' href='#n6330'>6330</a> <a id='n6331' href='#n6331'>6331</a> <a id='n6332' href='#n6332'>6332</a> <a id='n6333' href='#n6333'>6333</a> <a id='n6334' href='#n6334'>6334</a> <a id='n6335' href='#n6335'>6335</a> <a id='n6336' href='#n6336'>6336</a> <a id='n6337' href='#n6337'>6337</a> <a id='n6338' href='#n6338'>6338</a> <a id='n6339' href='#n6339'>6339</a> <a id='n6340' href='#n6340'>6340</a> <a id='n6341' href='#n6341'>6341</a> <a id='n6342' href='#n6342'>6342</a> <a id='n6343' href='#n6343'>6343</a> <a id='n6344' href='#n6344'>6344</a> <a id='n6345' href='#n6345'>6345</a> <a id='n6346' href='#n6346'>6346</a> <a id='n6347' href='#n6347'>6347</a> <a id='n6348' href='#n6348'>6348</a> <a id='n6349' href='#n6349'>6349</a> <a id='n6350' href='#n6350'>6350</a> <a id='n6351' href='#n6351'>6351</a> <a id='n6352' href='#n6352'>6352</a> <a id='n6353' href='#n6353'>6353</a> <a id='n6354' href='#n6354'>6354</a> <a id='n6355' href='#n6355'>6355</a> <a id='n6356' href='#n6356'>6356</a> <a id='n6357' href='#n6357'>6357</a> <a id='n6358' href='#n6358'>6358</a> <a id='n6359' href='#n6359'>6359</a> <a id='n6360' href='#n6360'>6360</a> <a id='n6361' href='#n6361'>6361</a> <a id='n6362' href='#n6362'>6362</a> <a id='n6363' href='#n6363'>6363</a> <a id='n6364' href='#n6364'>6364</a> <a id='n6365' href='#n6365'>6365</a> <a id='n6366' href='#n6366'>6366</a> <a id='n6367' href='#n6367'>6367</a> <a id='n6368' href='#n6368'>6368</a> <a id='n6369' href='#n6369'>6369</a> <a id='n6370' href='#n6370'>6370</a> <a id='n6371' href='#n6371'>6371</a> <a id='n6372' href='#n6372'>6372</a> <a id='n6373' href='#n6373'>6373</a> <a id='n6374' href='#n6374'>6374</a> <a id='n6375' href='#n6375'>6375</a> <a id='n6376' href='#n6376'>6376</a> <a id='n6377' href='#n6377'>6377</a> <a id='n6378' href='#n6378'>6378</a> <a id='n6379' href='#n6379'>6379</a> <a id='n6380' href='#n6380'>6380</a> <a id='n6381' href='#n6381'>6381</a> <a id='n6382' href='#n6382'>6382</a> <a id='n6383' href='#n6383'>6383</a> <a id='n6384' href='#n6384'>6384</a> <a id='n6385' href='#n6385'>6385</a> <a id='n6386' href='#n6386'>6386</a> <a id='n6387' href='#n6387'>6387</a> <a id='n6388' href='#n6388'>6388</a> <a id='n6389' href='#n6389'>6389</a> <a id='n6390' href='#n6390'>6390</a> <a id='n6391' href='#n6391'>6391</a> <a id='n6392' href='#n6392'>6392</a> <a id='n6393' href='#n6393'>6393</a> <a id='n6394' href='#n6394'>6394</a> <a id='n6395' href='#n6395'>6395</a> <a id='n6396' href='#n6396'>6396</a> <a id='n6397' href='#n6397'>6397</a> <a id='n6398' href='#n6398'>6398</a> <a id='n6399' href='#n6399'>6399</a> <a id='n6400' href='#n6400'>6400</a> <a id='n6401' href='#n6401'>6401</a> <a id='n6402' href='#n6402'>6402</a> <a id='n6403' href='#n6403'>6403</a> <a id='n6404' href='#n6404'>6404</a> <a id='n6405' href='#n6405'>6405</a> <a id='n6406' href='#n6406'>6406</a> <a id='n6407' href='#n6407'>6407</a> <a id='n6408' href='#n6408'>6408</a> <a id='n6409' href='#n6409'>6409</a> <a id='n6410' href='#n6410'>6410</a> <a id='n6411' href='#n6411'>6411</a> <a id='n6412' href='#n6412'>6412</a> <a id='n6413' href='#n6413'>6413</a> <a id='n6414' href='#n6414'>6414</a> <a id='n6415' href='#n6415'>6415</a> <a id='n6416' href='#n6416'>6416</a> <a id='n6417' href='#n6417'>6417</a> <a id='n6418' href='#n6418'>6418</a> <a id='n6419' href='#n6419'>6419</a> <a id='n6420' href='#n6420'>6420</a> <a id='n6421' href='#n6421'>6421</a> <a id='n6422' href='#n6422'>6422</a> <a id='n6423' href='#n6423'>6423</a> <a id='n6424' href='#n6424'>6424</a> <a id='n6425' href='#n6425'>6425</a> <a id='n6426' href='#n6426'>6426</a> <a id='n6427' href='#n6427'>6427</a> <a id='n6428' href='#n6428'>6428</a> <a id='n6429' href='#n6429'>6429</a> <a id='n6430' href='#n6430'>6430</a> <a id='n6431' href='#n6431'>6431</a> <a id='n6432' href='#n6432'>6432</a> <a id='n6433' href='#n6433'>6433</a> <a id='n6434' href='#n6434'>6434</a> <a id='n6435' href='#n6435'>6435</a> <a id='n6436' href='#n6436'>6436</a> <a id='n6437' href='#n6437'>6437</a> <a id='n6438' href='#n6438'>6438</a> <a id='n6439' href='#n6439'>6439</a> <a id='n6440' href='#n6440'>6440</a> <a id='n6441' href='#n6441'>6441</a> <a id='n6442' href='#n6442'>6442</a> <a id='n6443' href='#n6443'>6443</a> <a id='n6444' href='#n6444'>6444</a> <a id='n6445' href='#n6445'>6445</a> <a id='n6446' href='#n6446'>6446</a> <a id='n6447' href='#n6447'>6447</a> <a id='n6448' href='#n6448'>6448</a> <a id='n6449' href='#n6449'>6449</a> <a id='n6450' href='#n6450'>6450</a> <a id='n6451' href='#n6451'>6451</a> <a id='n6452' href='#n6452'>6452</a> <a id='n6453' href='#n6453'>6453</a> <a id='n6454' href='#n6454'>6454</a> <a id='n6455' href='#n6455'>6455</a> <a id='n6456' href='#n6456'>6456</a> <a id='n6457' href='#n6457'>6457</a> <a id='n6458' href='#n6458'>6458</a> <a id='n6459' href='#n6459'>6459</a> <a id='n6460' href='#n6460'>6460</a> <a id='n6461' href='#n6461'>6461</a> <a id='n6462' href='#n6462'>6462</a> <a id='n6463' href='#n6463'>6463</a> <a id='n6464' href='#n6464'>6464</a> <a id='n6465' href='#n6465'>6465</a> <a id='n6466' href='#n6466'>6466</a> <a id='n6467' href='#n6467'>6467</a> <a id='n6468' href='#n6468'>6468</a> <a id='n6469' href='#n6469'>6469</a> <a id='n6470' href='#n6470'>6470</a> <a id='n6471' href='#n6471'>6471</a> <a id='n6472' href='#n6472'>6472</a> <a id='n6473' href='#n6473'>6473</a> <a id='n6474' href='#n6474'>6474</a> <a id='n6475' href='#n6475'>6475</a> <a id='n6476' href='#n6476'>6476</a> <a id='n6477' href='#n6477'>6477</a> <a id='n6478' href='#n6478'>6478</a> <a id='n6479' href='#n6479'>6479</a> <a id='n6480' href='#n6480'>6480</a> <a id='n6481' href='#n6481'>6481</a> <a id='n6482' href='#n6482'>6482</a> <a id='n6483' href='#n6483'>6483</a> <a id='n6484' href='#n6484'>6484</a> <a id='n6485' href='#n6485'>6485</a> <a id='n6486' href='#n6486'>6486</a> <a id='n6487' href='#n6487'>6487</a> <a id='n6488' href='#n6488'>6488</a> <a id='n6489' href='#n6489'>6489</a> <a id='n6490' href='#n6490'>6490</a> <a id='n6491' href='#n6491'>6491</a> <a id='n6492' href='#n6492'>6492</a> <a id='n6493' href='#n6493'>6493</a> <a id='n6494' href='#n6494'>6494</a> <a id='n6495' href='#n6495'>6495</a> <a id='n6496' href='#n6496'>6496</a> <a id='n6497' href='#n6497'>6497</a> <a id='n6498' href='#n6498'>6498</a> <a id='n6499' href='#n6499'>6499</a> <a id='n6500' href='#n6500'>6500</a> <a id='n6501' href='#n6501'>6501</a> <a id='n6502' href='#n6502'>6502</a> <a id='n6503' href='#n6503'>6503</a> <a id='n6504' href='#n6504'>6504</a> <a id='n6505' href='#n6505'>6505</a> <a id='n6506' href='#n6506'>6506</a> <a id='n6507' href='#n6507'>6507</a> <a id='n6508' href='#n6508'>6508</a> <a id='n6509' href='#n6509'>6509</a> <a id='n6510' href='#n6510'>6510</a> <a id='n6511' href='#n6511'>6511</a> <a id='n6512' href='#n6512'>6512</a> <a id='n6513' href='#n6513'>6513</a> <a id='n6514' href='#n6514'>6514</a> <a id='n6515' href='#n6515'>6515</a> <a id='n6516' href='#n6516'>6516</a> <a id='n6517' href='#n6517'>6517</a> <a id='n6518' href='#n6518'>6518</a> <a id='n6519' href='#n6519'>6519</a> <a id='n6520' href='#n6520'>6520</a> <a id='n6521' href='#n6521'>6521</a> <a id='n6522' href='#n6522'>6522</a> <a id='n6523' href='#n6523'>6523</a> <a id='n6524' href='#n6524'>6524</a> <a id='n6525' href='#n6525'>6525</a> <a id='n6526' href='#n6526'>6526</a> <a id='n6527' href='#n6527'>6527</a> <a id='n6528' href='#n6528'>6528</a> <a id='n6529' href='#n6529'>6529</a> <a id='n6530' href='#n6530'>6530</a> <a id='n6531' href='#n6531'>6531</a> <a id='n6532' href='#n6532'>6532</a> <a id='n6533' href='#n6533'>6533</a> <a id='n6534' href='#n6534'>6534</a> <a id='n6535' href='#n6535'>6535</a> <a id='n6536' href='#n6536'>6536</a> <a id='n6537' href='#n6537'>6537</a> <a id='n6538' href='#n6538'>6538</a> <a id='n6539' href='#n6539'>6539</a> <a id='n6540' href='#n6540'>6540</a> <a id='n6541' href='#n6541'>6541</a> <a id='n6542' href='#n6542'>6542</a> <a id='n6543' href='#n6543'>6543</a> <a id='n6544' href='#n6544'>6544</a> <a id='n6545' href='#n6545'>6545</a> <a id='n6546' href='#n6546'>6546</a> <a id='n6547' href='#n6547'>6547</a> <a id='n6548' href='#n6548'>6548</a> <a id='n6549' href='#n6549'>6549</a> <a id='n6550' href='#n6550'>6550</a> <a id='n6551' href='#n6551'>6551</a> <a id='n6552' href='#n6552'>6552</a> <a id='n6553' href='#n6553'>6553</a> <a id='n6554' href='#n6554'>6554</a> <a id='n6555' href='#n6555'>6555</a> <a id='n6556' href='#n6556'>6556</a> <a id='n6557' href='#n6557'>6557</a> <a id='n6558' href='#n6558'>6558</a> <a id='n6559' href='#n6559'>6559</a> <a id='n6560' href='#n6560'>6560</a> <a id='n6561' href='#n6561'>6561</a> <a id='n6562' href='#n6562'>6562</a> <a id='n6563' href='#n6563'>6563</a> <a id='n6564' href='#n6564'>6564</a> <a id='n6565' href='#n6565'>6565</a> <a id='n6566' href='#n6566'>6566</a> <a id='n6567' href='#n6567'>6567</a> <a id='n6568' href='#n6568'>6568</a> <a id='n6569' href='#n6569'>6569</a> <a id='n6570' href='#n6570'>6570</a> <a id='n6571' href='#n6571'>6571</a> <a id='n6572' href='#n6572'>6572</a> <a id='n6573' href='#n6573'>6573</a> <a id='n6574' href='#n6574'>6574</a> <a id='n6575' href='#n6575'>6575</a> <a id='n6576' href='#n6576'>6576</a> <a id='n6577' href='#n6577'>6577</a> <a id='n6578' href='#n6578'>6578</a> <a id='n6579' href='#n6579'>6579</a> <a id='n6580' href='#n6580'>6580</a> <a id='n6581' href='#n6581'>6581</a> <a id='n6582' href='#n6582'>6582</a> <a id='n6583' href='#n6583'>6583</a> <a id='n6584' href='#n6584'>6584</a> <a id='n6585' href='#n6585'>6585</a> <a id='n6586' href='#n6586'>6586</a> <a id='n6587' href='#n6587'>6587</a> <a id='n6588' href='#n6588'>6588</a> <a id='n6589' href='#n6589'>6589</a> <a id='n6590' href='#n6590'>6590</a> <a id='n6591' href='#n6591'>6591</a> <a id='n6592' href='#n6592'>6592</a> <a id='n6593' href='#n6593'>6593</a> <a id='n6594' href='#n6594'>6594</a> <a id='n6595' href='#n6595'>6595</a> <a id='n6596' href='#n6596'>6596</a> <a id='n6597' href='#n6597'>6597</a> <a id='n6598' href='#n6598'>6598</a> <a id='n6599' href='#n6599'>6599</a> <a id='n6600' href='#n6600'>6600</a> <a id='n6601' href='#n6601'>6601</a> <a id='n6602' href='#n6602'>6602</a> <a id='n6603' href='#n6603'>6603</a> <a id='n6604' href='#n6604'>6604</a> <a id='n6605' href='#n6605'>6605</a> <a id='n6606' href='#n6606'>6606</a> <a id='n6607' href='#n6607'>6607</a> <a id='n6608' href='#n6608'>6608</a> <a id='n6609' href='#n6609'>6609</a> <a id='n6610' href='#n6610'>6610</a> <a id='n6611' href='#n6611'>6611</a> <a id='n6612' href='#n6612'>6612</a> <a id='n6613' href='#n6613'>6613</a> <a id='n6614' href='#n6614'>6614</a> <a id='n6615' href='#n6615'>6615</a> <a id='n6616' href='#n6616'>6616</a> <a id='n6617' href='#n6617'>6617</a> <a id='n6618' href='#n6618'>6618</a> <a id='n6619' href='#n6619'>6619</a> <a id='n6620' href='#n6620'>6620</a> <a id='n6621' href='#n6621'>6621</a> <a id='n6622' href='#n6622'>6622</a> <a id='n6623' href='#n6623'>6623</a> <a id='n6624' href='#n6624'>6624</a> <a id='n6625' href='#n6625'>6625</a> <a id='n6626' href='#n6626'>6626</a> <a id='n6627' href='#n6627'>6627</a> <a id='n6628' href='#n6628'>6628</a> <a id='n6629' href='#n6629'>6629</a> <a id='n6630' href='#n6630'>6630</a> <a id='n6631' href='#n6631'>6631</a> <a id='n6632' href='#n6632'>6632</a> <a id='n6633' href='#n6633'>6633</a> <a id='n6634' href='#n6634'>6634</a> <a id='n6635' href='#n6635'>6635</a> <a id='n6636' href='#n6636'>6636</a> <a id='n6637' href='#n6637'>6637</a> <a id='n6638' href='#n6638'>6638</a> <a id='n6639' href='#n6639'>6639</a> <a id='n6640' href='#n6640'>6640</a> <a id='n6641' href='#n6641'>6641</a> <a id='n6642' href='#n6642'>6642</a> <a id='n6643' href='#n6643'>6643</a> <a id='n6644' href='#n6644'>6644</a> <a id='n6645' href='#n6645'>6645</a> <a id='n6646' href='#n6646'>6646</a> <a id='n6647' href='#n6647'>6647</a> <a id='n6648' href='#n6648'>6648</a> <a id='n6649' href='#n6649'>6649</a> <a id='n6650' href='#n6650'>6650</a> <a id='n6651' href='#n6651'>6651</a> <a id='n6652' href='#n6652'>6652</a> <a id='n6653' href='#n6653'>6653</a> <a id='n6654' href='#n6654'>6654</a> <a id='n6655' href='#n6655'>6655</a> <a id='n6656' href='#n6656'>6656</a> <a id='n6657' href='#n6657'>6657</a> <a id='n6658' href='#n6658'>6658</a> <a id='n6659' href='#n6659'>6659</a> <a id='n6660' href='#n6660'>6660</a> <a id='n6661' href='#n6661'>6661</a> <a id='n6662' href='#n6662'>6662</a> <a id='n6663' href='#n6663'>6663</a> <a id='n6664' href='#n6664'>6664</a> <a id='n6665' href='#n6665'>6665</a> <a id='n6666' href='#n6666'>6666</a> <a id='n6667' href='#n6667'>6667</a> <a id='n6668' href='#n6668'>6668</a> <a id='n6669' href='#n6669'>6669</a> <a id='n6670' href='#n6670'>6670</a> <a id='n6671' href='#n6671'>6671</a> <a id='n6672' href='#n6672'>6672</a> <a id='n6673' href='#n6673'>6673</a> <a id='n6674' href='#n6674'>6674</a> <a id='n6675' href='#n6675'>6675</a> <a id='n6676' href='#n6676'>6676</a> <a id='n6677' href='#n6677'>6677</a> <a id='n6678' href='#n6678'>6678</a> <a id='n6679' href='#n6679'>6679</a> <a id='n6680' href='#n6680'>6680</a> <a id='n6681' href='#n6681'>6681</a> <a id='n6682' href='#n6682'>6682</a> <a id='n6683' href='#n6683'>6683</a> <a id='n6684' href='#n6684'>6684</a> <a id='n6685' href='#n6685'>6685</a> <a id='n6686' href='#n6686'>6686</a> <a id='n6687' href='#n6687'>6687</a> <a id='n6688' href='#n6688'>6688</a> <a id='n6689' href='#n6689'>6689</a> <a id='n6690' href='#n6690'>6690</a> <a id='n6691' href='#n6691'>6691</a> <a id='n6692' href='#n6692'>6692</a> <a id='n6693' href='#n6693'>6693</a> <a id='n6694' href='#n6694'>6694</a> <a id='n6695' href='#n6695'>6695</a> <a id='n6696' href='#n6696'>6696</a> <a id='n6697' href='#n6697'>6697</a> <a id='n6698' href='#n6698'>6698</a> <a id='n6699' href='#n6699'>6699</a> <a id='n6700' href='#n6700'>6700</a> <a id='n6701' href='#n6701'>6701</a> <a id='n6702' href='#n6702'>6702</a> <a id='n6703' href='#n6703'>6703</a> <a id='n6704' href='#n6704'>6704</a> <a id='n6705' href='#n6705'>6705</a> <a id='n6706' href='#n6706'>6706</a> <a id='n6707' href='#n6707'>6707</a> <a id='n6708' href='#n6708'>6708</a> <a id='n6709' href='#n6709'>6709</a> <a id='n6710' href='#n6710'>6710</a> <a id='n6711' href='#n6711'>6711</a> <a id='n6712' href='#n6712'>6712</a> <a id='n6713' href='#n6713'>6713</a> <a id='n6714' href='#n6714'>6714</a> <a id='n6715' href='#n6715'>6715</a> <a id='n6716' href='#n6716'>6716</a> <a id='n6717' href='#n6717'>6717</a> <a id='n6718' href='#n6718'>6718</a> <a id='n6719' href='#n6719'>6719</a> <a id='n6720' href='#n6720'>6720</a> <a id='n6721' href='#n6721'>6721</a> <a id='n6722' href='#n6722'>6722</a> <a id='n6723' href='#n6723'>6723</a> <a id='n6724' href='#n6724'>6724</a> <a id='n6725' href='#n6725'>6725</a> <a id='n6726' href='#n6726'>6726</a> <a id='n6727' href='#n6727'>6727</a> <a id='n6728' href='#n6728'>6728</a> <a id='n6729' href='#n6729'>6729</a> <a id='n6730' href='#n6730'>6730</a> <a id='n6731' href='#n6731'>6731</a> <a id='n6732' href='#n6732'>6732</a> <a id='n6733' href='#n6733'>6733</a> <a id='n6734' href='#n6734'>6734</a> <a id='n6735' href='#n6735'>6735</a> <a id='n6736' href='#n6736'>6736</a> <a id='n6737' href='#n6737'>6737</a> <a id='n6738' href='#n6738'>6738</a> <a id='n6739' href='#n6739'>6739</a> <a id='n6740' href='#n6740'>6740</a> <a id='n6741' href='#n6741'>6741</a> <a id='n6742' href='#n6742'>6742</a> <a id='n6743' href='#n6743'>6743</a> <a id='n6744' href='#n6744'>6744</a> <a id='n6745' href='#n6745'>6745</a> <a id='n6746' href='#n6746'>6746</a> <a id='n6747' href='#n6747'>6747</a> <a id='n6748' href='#n6748'>6748</a> <a id='n6749' href='#n6749'>6749</a> <a id='n6750' href='#n6750'>6750</a> <a id='n6751' href='#n6751'>6751</a> <a id='n6752' href='#n6752'>6752</a> <a id='n6753' href='#n6753'>6753</a> <a id='n6754' href='#n6754'>6754</a> <a id='n6755' href='#n6755'>6755</a> <a id='n6756' href='#n6756'>6756</a> <a id='n6757' href='#n6757'>6757</a> <a id='n6758' href='#n6758'>6758</a> <a id='n6759' href='#n6759'>6759</a> <a id='n6760' href='#n6760'>6760</a> <a id='n6761' href='#n6761'>6761</a> <a id='n6762' href='#n6762'>6762</a> <a id='n6763' href='#n6763'>6763</a> <a id='n6764' href='#n6764'>6764</a> <a id='n6765' href='#n6765'>6765</a> <a id='n6766' href='#n6766'>6766</a> <a id='n6767' href='#n6767'>6767</a> <a id='n6768' href='#n6768'>6768</a> <a id='n6769' href='#n6769'>6769</a> <a id='n6770' href='#n6770'>6770</a> <a id='n6771' href='#n6771'>6771</a> <a id='n6772' href='#n6772'>6772</a> <a id='n6773' href='#n6773'>6773</a> <a id='n6774' href='#n6774'>6774</a> <a id='n6775' href='#n6775'>6775</a> <a id='n6776' href='#n6776'>6776</a> <a id='n6777' href='#n6777'>6777</a> <a id='n6778' href='#n6778'>6778</a> <a id='n6779' href='#n6779'>6779</a> <a id='n6780' href='#n6780'>6780</a> <a id='n6781' href='#n6781'>6781</a> <a id='n6782' href='#n6782'>6782</a> <a id='n6783' href='#n6783'>6783</a> <a id='n6784' href='#n6784'>6784</a> <a id='n6785' href='#n6785'>6785</a> <a id='n6786' href='#n6786'>6786</a> <a id='n6787' href='#n6787'>6787</a> <a id='n6788' href='#n6788'>6788</a> <a id='n6789' href='#n6789'>6789</a> <a id='n6790' href='#n6790'>6790</a> <a id='n6791' href='#n6791'>6791</a> <a id='n6792' href='#n6792'>6792</a> <a id='n6793' href='#n6793'>6793</a> <a id='n6794' href='#n6794'>6794</a> <a id='n6795' href='#n6795'>6795</a> <a id='n6796' href='#n6796'>6796</a> <a id='n6797' href='#n6797'>6797</a> <a id='n6798' href='#n6798'>6798</a> <a id='n6799' href='#n6799'>6799</a> <a id='n6800' href='#n6800'>6800</a> <a id='n6801' href='#n6801'>6801</a> <a id='n6802' href='#n6802'>6802</a> <a id='n6803' href='#n6803'>6803</a> <a id='n6804' href='#n6804'>6804</a> <a id='n6805' href='#n6805'>6805</a> <a id='n6806' href='#n6806'>6806</a> <a id='n6807' href='#n6807'>6807</a> <a id='n6808' href='#n6808'>6808</a> <a id='n6809' href='#n6809'>6809</a> <a id='n6810' href='#n6810'>6810</a> <a id='n6811' href='#n6811'>6811</a> <a id='n6812' href='#n6812'>6812</a> <a id='n6813' href='#n6813'>6813</a> <a id='n6814' href='#n6814'>6814</a> <a id='n6815' href='#n6815'>6815</a> <a id='n6816' href='#n6816'>6816</a> <a id='n6817' href='#n6817'>6817</a> <a id='n6818' href='#n6818'>6818</a> <a id='n6819' href='#n6819'>6819</a> <a id='n6820' href='#n6820'>6820</a> <a id='n6821' href='#n6821'>6821</a> <a id='n6822' href='#n6822'>6822</a> <a id='n6823' href='#n6823'>6823</a> <a id='n6824' href='#n6824'>6824</a> <a id='n6825' href='#n6825'>6825</a> <a id='n6826' href='#n6826'>6826</a> <a id='n6827' href='#n6827'>6827</a> <a id='n6828' href='#n6828'>6828</a> <a id='n6829' href='#n6829'>6829</a> <a id='n6830' href='#n6830'>6830</a> <a id='n6831' href='#n6831'>6831</a> <a id='n6832' href='#n6832'>6832</a> <a id='n6833' href='#n6833'>6833</a> <a id='n6834' href='#n6834'>6834</a> <a id='n6835' href='#n6835'>6835</a> <a id='n6836' href='#n6836'>6836</a> <a id='n6837' href='#n6837'>6837</a> <a id='n6838' href='#n6838'>6838</a> <a id='n6839' href='#n6839'>6839</a> <a id='n6840' href='#n6840'>6840</a> <a id='n6841' href='#n6841'>6841</a> <a id='n6842' href='#n6842'>6842</a> <a id='n6843' href='#n6843'>6843</a> <a id='n6844' href='#n6844'>6844</a> <a id='n6845' href='#n6845'>6845</a> <a id='n6846' href='#n6846'>6846</a> <a id='n6847' href='#n6847'>6847</a> <a id='n6848' href='#n6848'>6848</a> <a id='n6849' href='#n6849'>6849</a> <a id='n6850' href='#n6850'>6850</a> <a id='n6851' href='#n6851'>6851</a> <a id='n6852' href='#n6852'>6852</a> <a id='n6853' href='#n6853'>6853</a> <a id='n6854' href='#n6854'>6854</a> <a id='n6855' href='#n6855'>6855</a> <a id='n6856' href='#n6856'>6856</a> <a id='n6857' href='#n6857'>6857</a> <a id='n6858' href='#n6858'>6858</a> <a id='n6859' href='#n6859'>6859</a> <a id='n6860' href='#n6860'>6860</a> <a id='n6861' href='#n6861'>6861</a> <a id='n6862' href='#n6862'>6862</a> <a id='n6863' href='#n6863'>6863</a> <a id='n6864' href='#n6864'>6864</a> <a id='n6865' href='#n6865'>6865</a> <a id='n6866' href='#n6866'>6866</a> <a id='n6867' href='#n6867'>6867</a> <a id='n6868' href='#n6868'>6868</a> <a id='n6869' href='#n6869'>6869</a> <a id='n6870' href='#n6870'>6870</a> <a id='n6871' href='#n6871'>6871</a> <a id='n6872' href='#n6872'>6872</a> <a id='n6873' href='#n6873'>6873</a> <a id='n6874' href='#n6874'>6874</a> <a id='n6875' href='#n6875'>6875</a> <a id='n6876' href='#n6876'>6876</a> <a id='n6877' href='#n6877'>6877</a> <a id='n6878' href='#n6878'>6878</a> <a id='n6879' href='#n6879'>6879</a> <a id='n6880' href='#n6880'>6880</a> <a id='n6881' href='#n6881'>6881</a> <a id='n6882' href='#n6882'>6882</a> <a id='n6883' href='#n6883'>6883</a> <a id='n6884' href='#n6884'>6884</a> <a id='n6885' href='#n6885'>6885</a> <a id='n6886' href='#n6886'>6886</a> <a id='n6887' href='#n6887'>6887</a> <a id='n6888' href='#n6888'>6888</a> <a id='n6889' href='#n6889'>6889</a> <a id='n6890' href='#n6890'>6890</a> <a id='n6891' href='#n6891'>6891</a> <a id='n6892' href='#n6892'>6892</a> <a id='n6893' href='#n6893'>6893</a> <a id='n6894' href='#n6894'>6894</a> <a id='n6895' href='#n6895'>6895</a> <a id='n6896' href='#n6896'>6896</a> <a id='n6897' href='#n6897'>6897</a> <a id='n6898' href='#n6898'>6898</a> <a id='n6899' href='#n6899'>6899</a> <a id='n6900' href='#n6900'>6900</a> <a id='n6901' href='#n6901'>6901</a> <a id='n6902' href='#n6902'>6902</a> <a id='n6903' href='#n6903'>6903</a> <a id='n6904' href='#n6904'>6904</a> <a id='n6905' href='#n6905'>6905</a> <a id='n6906' href='#n6906'>6906</a> <a id='n6907' href='#n6907'>6907</a> <a id='n6908' href='#n6908'>6908</a> <a id='n6909' href='#n6909'>6909</a> <a id='n6910' href='#n6910'>6910</a> <a id='n6911' href='#n6911'>6911</a> <a id='n6912' href='#n6912'>6912</a> <a id='n6913' href='#n6913'>6913</a> <a id='n6914' href='#n6914'>6914</a> <a id='n6915' href='#n6915'>6915</a> <a id='n6916' href='#n6916'>6916</a> <a id='n6917' href='#n6917'>6917</a> <a id='n6918' href='#n6918'>6918</a> <a id='n6919' href='#n6919'>6919</a> <a id='n6920' href='#n6920'>6920</a> <a id='n6921' href='#n6921'>6921</a> <a id='n6922' href='#n6922'>6922</a> <a id='n6923' href='#n6923'>6923</a> <a id='n6924' href='#n6924'>6924</a> <a id='n6925' href='#n6925'>6925</a> <a id='n6926' href='#n6926'>6926</a> <a id='n6927' href='#n6927'>6927</a> <a id='n6928' href='#n6928'>6928</a> <a id='n6929' href='#n6929'>6929</a> <a id='n6930' href='#n6930'>6930</a> <a id='n6931' href='#n6931'>6931</a> <a id='n6932' href='#n6932'>6932</a> <a id='n6933' href='#n6933'>6933</a> <a id='n6934' href='#n6934'>6934</a> <a id='n6935' href='#n6935'>6935</a> <a id='n6936' href='#n6936'>6936</a> <a id='n6937' href='#n6937'>6937</a> <a id='n6938' href='#n6938'>6938</a> <a id='n6939' href='#n6939'>6939</a> <a id='n6940' href='#n6940'>6940</a> <a id='n6941' href='#n6941'>6941</a> <a id='n6942' href='#n6942'>6942</a> <a id='n6943' href='#n6943'>6943</a> <a id='n6944' href='#n6944'>6944</a> <a id='n6945' href='#n6945'>6945</a> <a id='n6946' href='#n6946'>6946</a> <a id='n6947' href='#n6947'>6947</a> <a id='n6948' href='#n6948'>6948</a> <a id='n6949' href='#n6949'>6949</a> <a id='n6950' href='#n6950'>6950</a> <a id='n6951' href='#n6951'>6951</a> <a id='n6952' href='#n6952'>6952</a> <a id='n6953' href='#n6953'>6953</a> <a id='n6954' href='#n6954'>6954</a> <a id='n6955' href='#n6955'>6955</a> <a id='n6956' href='#n6956'>6956</a> <a id='n6957' href='#n6957'>6957</a> <a id='n6958' href='#n6958'>6958</a> <a id='n6959' href='#n6959'>6959</a> <a id='n6960' href='#n6960'>6960</a> <a id='n6961' href='#n6961'>6961</a> <a id='n6962' href='#n6962'>6962</a> <a id='n6963' href='#n6963'>6963</a> <a id='n6964' href='#n6964'>6964</a> <a id='n6965' href='#n6965'>6965</a> <a id='n6966' href='#n6966'>6966</a> <a id='n6967' href='#n6967'>6967</a> <a id='n6968' href='#n6968'>6968</a> <a id='n6969' href='#n6969'>6969</a> <a id='n6970' href='#n6970'>6970</a> <a id='n6971' href='#n6971'>6971</a> <a id='n6972' href='#n6972'>6972</a> <a id='n6973' href='#n6973'>6973</a> <a id='n6974' href='#n6974'>6974</a> <a id='n6975' href='#n6975'>6975</a> <a id='n6976' href='#n6976'>6976</a> <a id='n6977' href='#n6977'>6977</a> <a id='n6978' href='#n6978'>6978</a> <a id='n6979' href='#n6979'>6979</a> <a id='n6980' href='#n6980'>6980</a> <a id='n6981' href='#n6981'>6981</a> <a id='n6982' href='#n6982'>6982</a> <a id='n6983' href='#n6983'>6983</a> <a id='n6984' href='#n6984'>6984</a> <a id='n6985' href='#n6985'>6985</a> <a id='n6986' href='#n6986'>6986</a> <a id='n6987' href='#n6987'>6987</a> <a id='n6988' href='#n6988'>6988</a> <a id='n6989' href='#n6989'>6989</a> <a id='n6990' href='#n6990'>6990</a> <a id='n6991' href='#n6991'>6991</a> <a id='n6992' href='#n6992'>6992</a> <a id='n6993' href='#n6993'>6993</a> <a id='n6994' href='#n6994'>6994</a> <a id='n6995' href='#n6995'>6995</a> <a id='n6996' href='#n6996'>6996</a> <a id='n6997' href='#n6997'>6997</a> <a id='n6998' href='#n6998'>6998</a> <a id='n6999' href='#n6999'>6999</a> <a id='n7000' href='#n7000'>7000</a> <a id='n7001' href='#n7001'>7001</a> <a id='n7002' href='#n7002'>7002</a> <a id='n7003' href='#n7003'>7003</a> <a id='n7004' href='#n7004'>7004</a> <a id='n7005' href='#n7005'>7005</a> <a id='n7006' href='#n7006'>7006</a> <a id='n7007' href='#n7007'>7007</a> <a id='n7008' href='#n7008'>7008</a> <a id='n7009' href='#n7009'>7009</a> <a id='n7010' href='#n7010'>7010</a> <a id='n7011' href='#n7011'>7011</a> <a id='n7012' href='#n7012'>7012</a> <a id='n7013' href='#n7013'>7013</a> <a id='n7014' href='#n7014'>7014</a> <a id='n7015' href='#n7015'>7015</a> <a id='n7016' href='#n7016'>7016</a> <a id='n7017' href='#n7017'>7017</a> <a id='n7018' href='#n7018'>7018</a> <a id='n7019' href='#n7019'>7019</a> <a id='n7020' href='#n7020'>7020</a> <a id='n7021' href='#n7021'>7021</a> <a id='n7022' href='#n7022'>7022</a> <a id='n7023' href='#n7023'>7023</a> <a id='n7024' href='#n7024'>7024</a> <a id='n7025' href='#n7025'>7025</a> <a id='n7026' href='#n7026'>7026</a> <a id='n7027' href='#n7027'>7027</a> <a id='n7028' href='#n7028'>7028</a> <a id='n7029' href='#n7029'>7029</a> <a id='n7030' href='#n7030'>7030</a> <a id='n7031' href='#n7031'>7031</a> <a id='n7032' href='#n7032'>7032</a> <a id='n7033' href='#n7033'>7033</a> <a id='n7034' href='#n7034'>7034</a> <a id='n7035' href='#n7035'>7035</a> <a id='n7036' href='#n7036'>7036</a> <a id='n7037' href='#n7037'>7037</a> <a id='n7038' href='#n7038'>7038</a> <a id='n7039' href='#n7039'>7039</a> <a id='n7040' href='#n7040'>7040</a> <a id='n7041' href='#n7041'>7041</a> <a id='n7042' href='#n7042'>7042</a> <a id='n7043' href='#n7043'>7043</a> <a id='n7044' href='#n7044'>7044</a> <a id='n7045' href='#n7045'>7045</a> <a id='n7046' href='#n7046'>7046</a> <a id='n7047' href='#n7047'>7047</a> <a id='n7048' href='#n7048'>7048</a> <a id='n7049' href='#n7049'>7049</a> <a id='n7050' href='#n7050'>7050</a> <a id='n7051' href='#n7051'>7051</a> <a id='n7052' href='#n7052'>7052</a> <a id='n7053' href='#n7053'>7053</a> <a id='n7054' href='#n7054'>7054</a> <a id='n7055' href='#n7055'>7055</a> <a id='n7056' href='#n7056'>7056</a> <a id='n7057' href='#n7057'>7057</a> <a id='n7058' href='#n7058'>7058</a> <a id='n7059' href='#n7059'>7059</a> <a id='n7060' href='#n7060'>7060</a> <a id='n7061' href='#n7061'>7061</a> <a id='n7062' href='#n7062'>7062</a> <a id='n7063' href='#n7063'>7063</a> <a id='n7064' href='#n7064'>7064</a> <a id='n7065' href='#n7065'>7065</a> <a id='n7066' href='#n7066'>7066</a> <a id='n7067' href='#n7067'>7067</a> <a id='n7068' href='#n7068'>7068</a> <a id='n7069' href='#n7069'>7069</a> <a id='n7070' href='#n7070'>7070</a> <a id='n7071' href='#n7071'>7071</a> <a id='n7072' href='#n7072'>7072</a> <a id='n7073' href='#n7073'>7073</a> <a id='n7074' href='#n7074'>7074</a> <a id='n7075' href='#n7075'>7075</a> <a id='n7076' href='#n7076'>7076</a> <a id='n7077' href='#n7077'>7077</a> <a id='n7078' href='#n7078'>7078</a> <a id='n7079' href='#n7079'>7079</a> <a id='n7080' href='#n7080'>7080</a> <a id='n7081' href='#n7081'>7081</a> <a id='n7082' href='#n7082'>7082</a> <a id='n7083' href='#n7083'>7083</a> <a id='n7084' href='#n7084'>7084</a> <a id='n7085' href='#n7085'>7085</a> <a id='n7086' href='#n7086'>7086</a> <a id='n7087' href='#n7087'>7087</a> <a id='n7088' href='#n7088'>7088</a> <a id='n7089' href='#n7089'>7089</a> <a id='n7090' href='#n7090'>7090</a> <a id='n7091' href='#n7091'>7091</a> <a id='n7092' href='#n7092'>7092</a> <a id='n7093' href='#n7093'>7093</a> <a id='n7094' href='#n7094'>7094</a> <a id='n7095' href='#n7095'>7095</a> <a id='n7096' href='#n7096'>7096</a> <a id='n7097' href='#n7097'>7097</a> <a id='n7098' href='#n7098'>7098</a> <a id='n7099' href='#n7099'>7099</a> <a id='n7100' href='#n7100'>7100</a> <a id='n7101' href='#n7101'>7101</a> <a id='n7102' href='#n7102'>7102</a> <a id='n7103' href='#n7103'>7103</a> <a id='n7104' href='#n7104'>7104</a> <a id='n7105' href='#n7105'>7105</a> <a id='n7106' href='#n7106'>7106</a> <a id='n7107' href='#n7107'>7107</a> <a id='n7108' href='#n7108'>7108</a> <a id='n7109' href='#n7109'>7109</a> <a id='n7110' href='#n7110'>7110</a> <a id='n7111' href='#n7111'>7111</a> <a id='n7112' href='#n7112'>7112</a> <a id='n7113' href='#n7113'>7113</a> <a id='n7114' href='#n7114'>7114</a> <a id='n7115' href='#n7115'>7115</a> <a id='n7116' href='#n7116'>7116</a> <a id='n7117' href='#n7117'>7117</a> <a id='n7118' href='#n7118'>7118</a> <a id='n7119' href='#n7119'>7119</a> <a id='n7120' href='#n7120'>7120</a> <a id='n7121' href='#n7121'>7121</a> <a id='n7122' href='#n7122'>7122</a> <a id='n7123' href='#n7123'>7123</a> <a id='n7124' href='#n7124'>7124</a> <a id='n7125' href='#n7125'>7125</a> <a id='n7126' href='#n7126'>7126</a> <a id='n7127' href='#n7127'>7127</a> <a id='n7128' href='#n7128'>7128</a> <a id='n7129' href='#n7129'>7129</a> <a id='n7130' href='#n7130'>7130</a> <a id='n7131' href='#n7131'>7131</a> <a id='n7132' href='#n7132'>7132</a> <a id='n7133' href='#n7133'>7133</a> <a id='n7134' href='#n7134'>7134</a> <a id='n7135' href='#n7135'>7135</a> <a id='n7136' href='#n7136'>7136</a> <a id='n7137' href='#n7137'>7137</a> <a id='n7138' href='#n7138'>7138</a> <a id='n7139' href='#n7139'>7139</a> <a id='n7140' href='#n7140'>7140</a> <a id='n7141' href='#n7141'>7141</a> <a id='n7142' href='#n7142'>7142</a> <a id='n7143' href='#n7143'>7143</a> <a id='n7144' href='#n7144'>7144</a> <a id='n7145' href='#n7145'>7145</a> <a id='n7146' href='#n7146'>7146</a> <a id='n7147' href='#n7147'>7147</a> <a id='n7148' href='#n7148'>7148</a> <a id='n7149' href='#n7149'>7149</a> <a id='n7150' href='#n7150'>7150</a> <a id='n7151' href='#n7151'>7151</a> <a id='n7152' href='#n7152'>7152</a> <a id='n7153' href='#n7153'>7153</a> <a id='n7154' href='#n7154'>7154</a> <a id='n7155' href='#n7155'>7155</a> <a id='n7156' href='#n7156'>7156</a> <a id='n7157' href='#n7157'>7157</a> <a id='n7158' href='#n7158'>7158</a> <a id='n7159' href='#n7159'>7159</a> <a id='n7160' href='#n7160'>7160</a> <a id='n7161' href='#n7161'>7161</a> <a id='n7162' href='#n7162'>7162</a> <a id='n7163' href='#n7163'>7163</a> <a id='n7164' href='#n7164'>7164</a> <a id='n7165' href='#n7165'>7165</a> <a id='n7166' href='#n7166'>7166</a> <a id='n7167' href='#n7167'>7167</a> <a id='n7168' href='#n7168'>7168</a> <a id='n7169' href='#n7169'>7169</a> <a id='n7170' href='#n7170'>7170</a> <a id='n7171' href='#n7171'>7171</a> <a id='n7172' href='#n7172'>7172</a> <a id='n7173' href='#n7173'>7173</a> <a id='n7174' href='#n7174'>7174</a> <a id='n7175' href='#n7175'>7175</a> <a id='n7176' href='#n7176'>7176</a> <a id='n7177' href='#n7177'>7177</a> <a id='n7178' href='#n7178'>7178</a> <a id='n7179' href='#n7179'>7179</a> <a id='n7180' href='#n7180'>7180</a> <a id='n7181' href='#n7181'>7181</a> <a id='n7182' href='#n7182'>7182</a> <a id='n7183' href='#n7183'>7183</a> <a id='n7184' href='#n7184'>7184</a> <a id='n7185' href='#n7185'>7185</a> <a id='n7186' href='#n7186'>7186</a> <a id='n7187' href='#n7187'>7187</a> <a id='n7188' href='#n7188'>7188</a> <a id='n7189' href='#n7189'>7189</a> <a id='n7190' href='#n7190'>7190</a> <a id='n7191' href='#n7191'>7191</a> <a id='n7192' href='#n7192'>7192</a> <a id='n7193' href='#n7193'>7193</a> <a id='n7194' href='#n7194'>7194</a> <a id='n7195' href='#n7195'>7195</a> <a id='n7196' href='#n7196'>7196</a> <a id='n7197' href='#n7197'>7197</a> <a id='n7198' href='#n7198'>7198</a> <a id='n7199' href='#n7199'>7199</a> <a id='n7200' href='#n7200'>7200</a> <a id='n7201' href='#n7201'>7201</a> <a id='n7202' href='#n7202'>7202</a> <a id='n7203' href='#n7203'>7203</a> <a id='n7204' href='#n7204'>7204</a> <a id='n7205' href='#n7205'>7205</a> <a id='n7206' href='#n7206'>7206</a> <a id='n7207' href='#n7207'>7207</a> <a id='n7208' href='#n7208'>7208</a> <a id='n7209' href='#n7209'>7209</a> <a id='n7210' href='#n7210'>7210</a> <a id='n7211' href='#n7211'>7211</a> <a id='n7212' href='#n7212'>7212</a> <a id='n7213' href='#n7213'>7213</a> <a id='n7214' href='#n7214'>7214</a> <a id='n7215' href='#n7215'>7215</a> <a id='n7216' href='#n7216'>7216</a> <a id='n7217' href='#n7217'>7217</a> <a id='n7218' href='#n7218'>7218</a> <a id='n7219' href='#n7219'>7219</a> <a id='n7220' href='#n7220'>7220</a> <a id='n7221' href='#n7221'>7221</a> <a id='n7222' href='#n7222'>7222</a> <a id='n7223' href='#n7223'>7223</a> <a id='n7224' href='#n7224'>7224</a> <a id='n7225' href='#n7225'>7225</a> <a id='n7226' href='#n7226'>7226</a> <a id='n7227' href='#n7227'>7227</a> <a id='n7228' href='#n7228'>7228</a> <a id='n7229' href='#n7229'>7229</a> <a id='n7230' href='#n7230'>7230</a> <a id='n7231' href='#n7231'>7231</a> <a id='n7232' href='#n7232'>7232</a> <a id='n7233' href='#n7233'>7233</a> <a id='n7234' href='#n7234'>7234</a> <a id='n7235' href='#n7235'>7235</a> <a id='n7236' href='#n7236'>7236</a> <a id='n7237' href='#n7237'>7237</a> <a id='n7238' href='#n7238'>7238</a> <a id='n7239' href='#n7239'>7239</a> <a id='n7240' href='#n7240'>7240</a> <a id='n7241' href='#n7241'>7241</a> <a id='n7242' href='#n7242'>7242</a> <a id='n7243' href='#n7243'>7243</a> <a id='n7244' href='#n7244'>7244</a> <a id='n7245' href='#n7245'>7245</a> <a id='n7246' href='#n7246'>7246</a> <a id='n7247' href='#n7247'>7247</a> <a id='n7248' href='#n7248'>7248</a> <a id='n7249' href='#n7249'>7249</a> <a id='n7250' href='#n7250'>7250</a> <a id='n7251' href='#n7251'>7251</a> <a id='n7252' href='#n7252'>7252</a> <a id='n7253' href='#n7253'>7253</a> <a id='n7254' href='#n7254'>7254</a> <a id='n7255' href='#n7255'>7255</a> <a id='n7256' href='#n7256'>7256</a> <a id='n7257' href='#n7257'>7257</a> <a id='n7258' href='#n7258'>7258</a> <a id='n7259' href='#n7259'>7259</a> <a id='n7260' href='#n7260'>7260</a> <a id='n7261' href='#n7261'>7261</a> <a id='n7262' href='#n7262'>7262</a> <a id='n7263' href='#n7263'>7263</a> <a id='n7264' href='#n7264'>7264</a> <a id='n7265' href='#n7265'>7265</a> <a id='n7266' href='#n7266'>7266</a> <a id='n7267' href='#n7267'>7267</a> <a id='n7268' href='#n7268'>7268</a> <a id='n7269' href='#n7269'>7269</a> <a id='n7270' href='#n7270'>7270</a> <a id='n7271' href='#n7271'>7271</a> <a id='n7272' href='#n7272'>7272</a> <a id='n7273' href='#n7273'>7273</a> <a id='n7274' href='#n7274'>7274</a> <a id='n7275' href='#n7275'>7275</a> <a id='n7276' href='#n7276'>7276</a> <a id='n7277' href='#n7277'>7277</a> <a id='n7278' href='#n7278'>7278</a> <a id='n7279' href='#n7279'>7279</a> <a id='n7280' href='#n7280'>7280</a> <a id='n7281' href='#n7281'>7281</a> <a id='n7282' href='#n7282'>7282</a> <a id='n7283' href='#n7283'>7283</a> <a id='n7284' href='#n7284'>7284</a> <a id='n7285' href='#n7285'>7285</a> <a id='n7286' href='#n7286'>7286</a> <a id='n7287' href='#n7287'>7287</a> <a id='n7288' href='#n7288'>7288</a> <a id='n7289' href='#n7289'>7289</a> <a id='n7290' href='#n7290'>7290</a> <a id='n7291' href='#n7291'>7291</a> <a id='n7292' href='#n7292'>7292</a> <a id='n7293' href='#n7293'>7293</a> <a id='n7294' href='#n7294'>7294</a> <a id='n7295' href='#n7295'>7295</a> <a id='n7296' href='#n7296'>7296</a> <a id='n7297' href='#n7297'>7297</a> <a id='n7298' href='#n7298'>7298</a> <a id='n7299' href='#n7299'>7299</a> <a id='n7300' href='#n7300'>7300</a> <a id='n7301' href='#n7301'>7301</a> <a id='n7302' href='#n7302'>7302</a> <a id='n7303' href='#n7303'>7303</a> <a id='n7304' href='#n7304'>7304</a> <a id='n7305' href='#n7305'>7305</a> <a id='n7306' href='#n7306'>7306</a> <a id='n7307' href='#n7307'>7307</a> <a id='n7308' href='#n7308'>7308</a> <a id='n7309' href='#n7309'>7309</a> <a id='n7310' href='#n7310'>7310</a> <a id='n7311' href='#n7311'>7311</a> <a id='n7312' href='#n7312'>7312</a> <a id='n7313' href='#n7313'>7313</a> <a id='n7314' href='#n7314'>7314</a> <a id='n7315' href='#n7315'>7315</a> <a id='n7316' href='#n7316'>7316</a> <a id='n7317' href='#n7317'>7317</a> <a id='n7318' href='#n7318'>7318</a> <a id='n7319' href='#n7319'>7319</a> <a id='n7320' href='#n7320'>7320</a> <a id='n7321' href='#n7321'>7321</a> <a id='n7322' href='#n7322'>7322</a> <a id='n7323' href='#n7323'>7323</a> <a id='n7324' href='#n7324'>7324</a> <a id='n7325' href='#n7325'>7325</a> <a id='n7326' href='#n7326'>7326</a> <a id='n7327' href='#n7327'>7327</a> <a id='n7328' href='#n7328'>7328</a> <a id='n7329' href='#n7329'>7329</a> <a id='n7330' href='#n7330'>7330</a> <a id='n7331' href='#n7331'>7331</a> <a id='n7332' href='#n7332'>7332</a> <a id='n7333' href='#n7333'>7333</a> <a id='n7334' href='#n7334'>7334</a> <a id='n7335' href='#n7335'>7335</a> <a id='n7336' href='#n7336'>7336</a> <a id='n7337' href='#n7337'>7337</a> <a id='n7338' href='#n7338'>7338</a> <a id='n7339' href='#n7339'>7339</a> <a id='n7340' href='#n7340'>7340</a> <a id='n7341' href='#n7341'>7341</a> <a id='n7342' href='#n7342'>7342</a> <a id='n7343' href='#n7343'>7343</a> <a id='n7344' href='#n7344'>7344</a> <a id='n7345' href='#n7345'>7345</a> <a id='n7346' href='#n7346'>7346</a> <a id='n7347' href='#n7347'>7347</a> <a id='n7348' href='#n7348'>7348</a> <a id='n7349' href='#n7349'>7349</a> <a id='n7350' href='#n7350'>7350</a> <a id='n7351' href='#n7351'>7351</a> <a id='n7352' href='#n7352'>7352</a> <a id='n7353' href='#n7353'>7353</a> <a id='n7354' href='#n7354'>7354</a> <a id='n7355' href='#n7355'>7355</a> <a id='n7356' href='#n7356'>7356</a> <a id='n7357' href='#n7357'>7357</a> <a id='n7358' href='#n7358'>7358</a> <a id='n7359' href='#n7359'>7359</a> <a id='n7360' href='#n7360'>7360</a> <a id='n7361' href='#n7361'>7361</a> <a id='n7362' href='#n7362'>7362</a> <a id='n7363' href='#n7363'>7363</a> <a id='n7364' href='#n7364'>7364</a> <a id='n7365' href='#n7365'>7365</a> <a id='n7366' href='#n7366'>7366</a> <a id='n7367' href='#n7367'>7367</a> <a id='n7368' href='#n7368'>7368</a> <a id='n7369' href='#n7369'>7369</a> <a id='n7370' href='#n7370'>7370</a> <a id='n7371' href='#n7371'>7371</a> <a id='n7372' href='#n7372'>7372</a> <a id='n7373' href='#n7373'>7373</a> <a id='n7374' href='#n7374'>7374</a> <a id='n7375' href='#n7375'>7375</a> <a id='n7376' href='#n7376'>7376</a> <a id='n7377' href='#n7377'>7377</a> <a id='n7378' href='#n7378'>7378</a> <a id='n7379' href='#n7379'>7379</a> <a id='n7380' href='#n7380'>7380</a> <a id='n7381' href='#n7381'>7381</a> <a id='n7382' href='#n7382'>7382</a> <a id='n7383' href='#n7383'>7383</a> <a id='n7384' href='#n7384'>7384</a> <a id='n7385' href='#n7385'>7385</a> <a id='n7386' href='#n7386'>7386</a> <a id='n7387' href='#n7387'>7387</a> <a id='n7388' href='#n7388'>7388</a> <a id='n7389' href='#n7389'>7389</a> <a id='n7390' href='#n7390'>7390</a> <a id='n7391' href='#n7391'>7391</a> <a id='n7392' href='#n7392'>7392</a> <a id='n7393' href='#n7393'>7393</a> <a id='n7394' href='#n7394'>7394</a> <a id='n7395' href='#n7395'>7395</a> <a id='n7396' href='#n7396'>7396</a> <a id='n7397' href='#n7397'>7397</a> <a id='n7398' href='#n7398'>7398</a> <a id='n7399' href='#n7399'>7399</a> <a id='n7400' href='#n7400'>7400</a> <a id='n7401' href='#n7401'>7401</a> <a id='n7402' href='#n7402'>7402</a> <a id='n7403' href='#n7403'>7403</a> <a id='n7404' href='#n7404'>7404</a> <a id='n7405' href='#n7405'>7405</a> <a id='n7406' href='#n7406'>7406</a> <a id='n7407' href='#n7407'>7407</a> <a id='n7408' href='#n7408'>7408</a> <a id='n7409' href='#n7409'>7409</a> <a id='n7410' href='#n7410'>7410</a> <a id='n7411' href='#n7411'>7411</a> <a id='n7412' href='#n7412'>7412</a> <a id='n7413' href='#n7413'>7413</a> <a id='n7414' href='#n7414'>7414</a> <a id='n7415' href='#n7415'>7415</a> <a id='n7416' href='#n7416'>7416</a> <a id='n7417' href='#n7417'>7417</a> <a id='n7418' href='#n7418'>7418</a> <a id='n7419' href='#n7419'>7419</a> <a id='n7420' href='#n7420'>7420</a> <a id='n7421' href='#n7421'>7421</a> <a id='n7422' href='#n7422'>7422</a> <a id='n7423' href='#n7423'>7423</a> <a id='n7424' href='#n7424'>7424</a> <a id='n7425' href='#n7425'>7425</a> <a id='n7426' href='#n7426'>7426</a> <a id='n7427' href='#n7427'>7427</a> <a id='n7428' href='#n7428'>7428</a> <a id='n7429' href='#n7429'>7429</a> <a id='n7430' href='#n7430'>7430</a> <a id='n7431' href='#n7431'>7431</a> <a id='n7432' href='#n7432'>7432</a> <a id='n7433' href='#n7433'>7433</a> <a id='n7434' href='#n7434'>7434</a> <a id='n7435' href='#n7435'>7435</a> <a id='n7436' href='#n7436'>7436</a> <a id='n7437' href='#n7437'>7437</a> <a id='n7438' href='#n7438'>7438</a> <a id='n7439' href='#n7439'>7439</a> <a id='n7440' href='#n7440'>7440</a> <a id='n7441' href='#n7441'>7441</a> <a id='n7442' href='#n7442'>7442</a> <a id='n7443' href='#n7443'>7443</a> <a id='n7444' href='#n7444'>7444</a> <a id='n7445' href='#n7445'>7445</a> <a id='n7446' href='#n7446'>7446</a> <a id='n7447' href='#n7447'>7447</a> <a id='n7448' href='#n7448'>7448</a> <a id='n7449' href='#n7449'>7449</a> <a id='n7450' href='#n7450'>7450</a> <a id='n7451' href='#n7451'>7451</a> <a id='n7452' href='#n7452'>7452</a> <a id='n7453' href='#n7453'>7453</a> <a id='n7454' href='#n7454'>7454</a> <a id='n7455' href='#n7455'>7455</a> <a id='n7456' href='#n7456'>7456</a> <a id='n7457' href='#n7457'>7457</a> <a id='n7458' href='#n7458'>7458</a> <a id='n7459' href='#n7459'>7459</a> <a id='n7460' href='#n7460'>7460</a> <a id='n7461' href='#n7461'>7461</a> <a id='n7462' href='#n7462'>7462</a> <a id='n7463' href='#n7463'>7463</a> <a id='n7464' href='#n7464'>7464</a> <a id='n7465' href='#n7465'>7465</a> <a id='n7466' href='#n7466'>7466</a> <a id='n7467' href='#n7467'>7467</a> <a id='n7468' href='#n7468'>7468</a> <a id='n7469' href='#n7469'>7469</a> <a id='n7470' href='#n7470'>7470</a> <a id='n7471' href='#n7471'>7471</a> <a id='n7472' href='#n7472'>7472</a> <a id='n7473' href='#n7473'>7473</a> <a id='n7474' href='#n7474'>7474</a> <a id='n7475' href='#n7475'>7475</a> <a id='n7476' href='#n7476'>7476</a> <a id='n7477' href='#n7477'>7477</a> <a id='n7478' href='#n7478'>7478</a> <a id='n7479' href='#n7479'>7479</a> <a id='n7480' href='#n7480'>7480</a> <a id='n7481' href='#n7481'>7481</a> <a id='n7482' href='#n7482'>7482</a> <a id='n7483' href='#n7483'>7483</a> <a id='n7484' href='#n7484'>7484</a> <a id='n7485' href='#n7485'>7485</a> <a id='n7486' href='#n7486'>7486</a> <a id='n7487' href='#n7487'>7487</a> <a id='n7488' href='#n7488'>7488</a> <a id='n7489' href='#n7489'>7489</a> <a id='n7490' href='#n7490'>7490</a> <a id='n7491' href='#n7491'>7491</a> <a id='n7492' href='#n7492'>7492</a> <a id='n7493' href='#n7493'>7493</a> <a id='n7494' href='#n7494'>7494</a> <a id='n7495' href='#n7495'>7495</a> <a id='n7496' href='#n7496'>7496</a> <a id='n7497' href='#n7497'>7497</a> <a id='n7498' href='#n7498'>7498</a> <a id='n7499' href='#n7499'>7499</a> <a id='n7500' href='#n7500'>7500</a> <a id='n7501' href='#n7501'>7501</a> <a id='n7502' href='#n7502'>7502</a> <a id='n7503' href='#n7503'>7503</a> <a id='n7504' href='#n7504'>7504</a> <a id='n7505' href='#n7505'>7505</a> <a id='n7506' href='#n7506'>7506</a> <a id='n7507' href='#n7507'>7507</a> <a id='n7508' href='#n7508'>7508</a> <a id='n7509' href='#n7509'>7509</a> <a id='n7510' href='#n7510'>7510</a> <a id='n7511' href='#n7511'>7511</a> <a id='n7512' href='#n7512'>7512</a> <a id='n7513' href='#n7513'>7513</a> <a id='n7514' href='#n7514'>7514</a> <a id='n7515' href='#n7515'>7515</a> <a id='n7516' href='#n7516'>7516</a> <a id='n7517' href='#n7517'>7517</a> <a id='n7518' href='#n7518'>7518</a> <a id='n7519' href='#n7519'>7519</a> <a id='n7520' href='#n7520'>7520</a> <a id='n7521' href='#n7521'>7521</a> <a id='n7522' href='#n7522'>7522</a> <a id='n7523' href='#n7523'>7523</a> <a id='n7524' href='#n7524'>7524</a> <a id='n7525' href='#n7525'>7525</a> <a id='n7526' href='#n7526'>7526</a> <a id='n7527' href='#n7527'>7527</a> <a id='n7528' href='#n7528'>7528</a> <a id='n7529' href='#n7529'>7529</a> <a id='n7530' href='#n7530'>7530</a> <a id='n7531' href='#n7531'>7531</a> <a id='n7532' href='#n7532'>7532</a> <a id='n7533' href='#n7533'>7533</a> <a id='n7534' href='#n7534'>7534</a> <a id='n7535' href='#n7535'>7535</a> <a id='n7536' href='#n7536'>7536</a> <a id='n7537' href='#n7537'>7537</a> <a id='n7538' href='#n7538'>7538</a> <a id='n7539' href='#n7539'>7539</a> <a id='n7540' href='#n7540'>7540</a> <a id='n7541' href='#n7541'>7541</a> <a id='n7542' href='#n7542'>7542</a> <a id='n7543' href='#n7543'>7543</a> <a id='n7544' href='#n7544'>7544</a> <a id='n7545' href='#n7545'>7545</a> <a id='n7546' href='#n7546'>7546</a> <a id='n7547' href='#n7547'>7547</a> <a id='n7548' href='#n7548'>7548</a> <a id='n7549' href='#n7549'>7549</a> <a id='n7550' href='#n7550'>7550</a> <a id='n7551' href='#n7551'>7551</a> <a id='n7552' href='#n7552'>7552</a> <a id='n7553' href='#n7553'>7553</a> <a id='n7554' href='#n7554'>7554</a> <a id='n7555' href='#n7555'>7555</a> <a id='n7556' href='#n7556'>7556</a> <a id='n7557' href='#n7557'>7557</a> <a id='n7558' href='#n7558'>7558</a> <a id='n7559' href='#n7559'>7559</a> <a id='n7560' href='#n7560'>7560</a> <a id='n7561' href='#n7561'>7561</a> <a id='n7562' href='#n7562'>7562</a> <a id='n7563' href='#n7563'>7563</a> <a id='n7564' href='#n7564'>7564</a> <a id='n7565' href='#n7565'>7565</a> <a id='n7566' href='#n7566'>7566</a> <a id='n7567' href='#n7567'>7567</a> <a id='n7568' href='#n7568'>7568</a> <a id='n7569' href='#n7569'>7569</a> <a id='n7570' href='#n7570'>7570</a> <a id='n7571' href='#n7571'>7571</a> <a id='n7572' href='#n7572'>7572</a> <a id='n7573' href='#n7573'>7573</a> <a id='n7574' href='#n7574'>7574</a> <a id='n7575' href='#n7575'>7575</a> <a id='n7576' href='#n7576'>7576</a> <a id='n7577' href='#n7577'>7577</a> <a id='n7578' href='#n7578'>7578</a> <a id='n7579' href='#n7579'>7579</a> <a id='n7580' href='#n7580'>7580</a> <a id='n7581' href='#n7581'>7581</a> <a id='n7582' href='#n7582'>7582</a> <a id='n7583' href='#n7583'>7583</a> <a id='n7584' href='#n7584'>7584</a> <a id='n7585' href='#n7585'>7585</a> <a id='n7586' href='#n7586'>7586</a> <a id='n7587' href='#n7587'>7587</a> <a id='n7588' href='#n7588'>7588</a> <a id='n7589' href='#n7589'>7589</a> <a id='n7590' href='#n7590'>7590</a> <a id='n7591' href='#n7591'>7591</a> <a id='n7592' href='#n7592'>7592</a> <a id='n7593' href='#n7593'>7593</a> <a id='n7594' href='#n7594'>7594</a> <a id='n7595' href='#n7595'>7595</a> <a id='n7596' href='#n7596'>7596</a> <a id='n7597' href='#n7597'>7597</a> <a id='n7598' href='#n7598'>7598</a> <a id='n7599' href='#n7599'>7599</a> <a id='n7600' href='#n7600'>7600</a> <a id='n7601' href='#n7601'>7601</a> <a id='n7602' href='#n7602'>7602</a> <a id='n7603' href='#n7603'>7603</a> <a id='n7604' href='#n7604'>7604</a> <a id='n7605' href='#n7605'>7605</a> <a id='n7606' href='#n7606'>7606</a> <a id='n7607' href='#n7607'>7607</a> <a id='n7608' href='#n7608'>7608</a> <a id='n7609' href='#n7609'>7609</a> <a id='n7610' href='#n7610'>7610</a> <a id='n7611' href='#n7611'>7611</a> <a id='n7612' href='#n7612'>7612</a> <a id='n7613' href='#n7613'>7613</a> <a id='n7614' href='#n7614'>7614</a> <a id='n7615' href='#n7615'>7615</a> <a id='n7616' href='#n7616'>7616</a> <a id='n7617' href='#n7617'>7617</a> <a id='n7618' href='#n7618'>7618</a> <a id='n7619' href='#n7619'>7619</a> <a id='n7620' href='#n7620'>7620</a> <a id='n7621' href='#n7621'>7621</a> <a id='n7622' href='#n7622'>7622</a> <a id='n7623' href='#n7623'>7623</a> <a id='n7624' href='#n7624'>7624</a> <a id='n7625' href='#n7625'>7625</a> <a id='n7626' href='#n7626'>7626</a> <a id='n7627' href='#n7627'>7627</a> <a id='n7628' href='#n7628'>7628</a> <a id='n7629' href='#n7629'>7629</a> <a id='n7630' href='#n7630'>7630</a> <a id='n7631' href='#n7631'>7631</a> <a id='n7632' href='#n7632'>7632</a> <a id='n7633' href='#n7633'>7633</a> <a id='n7634' href='#n7634'>7634</a> <a id='n7635' href='#n7635'>7635</a> <a id='n7636' href='#n7636'>7636</a> <a id='n7637' href='#n7637'>7637</a> <a id='n7638' href='#n7638'>7638</a> <a id='n7639' href='#n7639'>7639</a> <a id='n7640' href='#n7640'>7640</a> <a id='n7641' href='#n7641'>7641</a> <a id='n7642' href='#n7642'>7642</a> <a id='n7643' href='#n7643'>7643</a> <a id='n7644' href='#n7644'>7644</a> <a id='n7645' href='#n7645'>7645</a> <a id='n7646' href='#n7646'>7646</a> <a id='n7647' href='#n7647'>7647</a> <a id='n7648' href='#n7648'>7648</a> <a id='n7649' href='#n7649'>7649</a> <a id='n7650' href='#n7650'>7650</a> <a id='n7651' href='#n7651'>7651</a> <a id='n7652' href='#n7652'>7652</a> <a id='n7653' href='#n7653'>7653</a> <a id='n7654' href='#n7654'>7654</a> <a id='n7655' href='#n7655'>7655</a> <a id='n7656' href='#n7656'>7656</a> <a id='n7657' href='#n7657'>7657</a> <a id='n7658' href='#n7658'>7658</a> <a id='n7659' href='#n7659'>7659</a> <a id='n7660' href='#n7660'>7660</a> <a id='n7661' href='#n7661'>7661</a> <a id='n7662' href='#n7662'>7662</a> <a id='n7663' href='#n7663'>7663</a> <a id='n7664' href='#n7664'>7664</a> <a id='n7665' href='#n7665'>7665</a> <a id='n7666' href='#n7666'>7666</a> <a id='n7667' href='#n7667'>7667</a> <a id='n7668' href='#n7668'>7668</a> <a id='n7669' href='#n7669'>7669</a> <a id='n7670' href='#n7670'>7670</a> <a id='n7671' href='#n7671'>7671</a> <a id='n7672' href='#n7672'>7672</a> <a id='n7673' href='#n7673'>7673</a> <a id='n7674' href='#n7674'>7674</a> <a id='n7675' href='#n7675'>7675</a> <a id='n7676' href='#n7676'>7676</a> <a id='n7677' href='#n7677'>7677</a> <a id='n7678' href='#n7678'>7678</a> <a id='n7679' href='#n7679'>7679</a> <a id='n7680' href='#n7680'>7680</a> <a id='n7681' href='#n7681'>7681</a> <a id='n7682' href='#n7682'>7682</a> <a id='n7683' href='#n7683'>7683</a> <a id='n7684' href='#n7684'>7684</a> <a id='n7685' href='#n7685'>7685</a> <a id='n7686' href='#n7686'>7686</a> <a id='n7687' href='#n7687'>7687</a> <a id='n7688' href='#n7688'>7688</a> <a id='n7689' href='#n7689'>7689</a> <a id='n7690' href='#n7690'>7690</a> <a id='n7691' href='#n7691'>7691</a> <a id='n7692' href='#n7692'>7692</a> <a id='n7693' href='#n7693'>7693</a> <a id='n7694' href='#n7694'>7694</a> <a id='n7695' href='#n7695'>7695</a> <a id='n7696' href='#n7696'>7696</a> <a id='n7697' href='#n7697'>7697</a> <a id='n7698' href='#n7698'>7698</a> <a id='n7699' href='#n7699'>7699</a> <a id='n7700' href='#n7700'>7700</a> <a id='n7701' href='#n7701'>7701</a> <a id='n7702' href='#n7702'>7702</a> <a id='n7703' href='#n7703'>7703</a> <a id='n7704' href='#n7704'>7704</a> <a id='n7705' href='#n7705'>7705</a> <a id='n7706' href='#n7706'>7706</a> <a id='n7707' href='#n7707'>7707</a> <a id='n7708' href='#n7708'>7708</a> <a id='n7709' href='#n7709'>7709</a> <a id='n7710' href='#n7710'>7710</a> <a id='n7711' href='#n7711'>7711</a> <a id='n7712' href='#n7712'>7712</a> <a id='n7713' href='#n7713'>7713</a> <a id='n7714' href='#n7714'>7714</a> <a id='n7715' href='#n7715'>7715</a> <a id='n7716' href='#n7716'>7716</a> <a id='n7717' href='#n7717'>7717</a> <a id='n7718' href='#n7718'>7718</a> <a id='n7719' href='#n7719'>7719</a> <a id='n7720' href='#n7720'>7720</a> <a id='n7721' href='#n7721'>7721</a> <a id='n7722' href='#n7722'>7722</a> <a id='n7723' href='#n7723'>7723</a> <a id='n7724' href='#n7724'>7724</a> <a id='n7725' href='#n7725'>7725</a> <a id='n7726' href='#n7726'>7726</a> <a id='n7727' href='#n7727'>7727</a> <a id='n7728' href='#n7728'>7728</a> <a id='n7729' href='#n7729'>7729</a> <a id='n7730' href='#n7730'>7730</a> <a id='n7731' href='#n7731'>7731</a> <a id='n7732' href='#n7732'>7732</a> <a id='n7733' href='#n7733'>7733</a> <a id='n7734' href='#n7734'>7734</a> <a id='n7735' href='#n7735'>7735</a> <a id='n7736' href='#n7736'>7736</a> <a id='n7737' href='#n7737'>7737</a> <a id='n7738' href='#n7738'>7738</a> <a id='n7739' href='#n7739'>7739</a> <a id='n7740' href='#n7740'>7740</a> <a id='n7741' href='#n7741'>7741</a> <a id='n7742' href='#n7742'>7742</a> <a id='n7743' href='#n7743'>7743</a> <a id='n7744' href='#n7744'>7744</a> <a id='n7745' href='#n7745'>7745</a> <a id='n7746' href='#n7746'>7746</a> <a id='n7747' href='#n7747'>7747</a> <a id='n7748' href='#n7748'>7748</a> <a id='n7749' href='#n7749'>7749</a> <a id='n7750' href='#n7750'>7750</a> <a id='n7751' href='#n7751'>7751</a> <a id='n7752' href='#n7752'>7752</a> <a id='n7753' href='#n7753'>7753</a> <a id='n7754' href='#n7754'>7754</a> <a id='n7755' href='#n7755'>7755</a> <a id='n7756' href='#n7756'>7756</a> <a id='n7757' href='#n7757'>7757</a> <a id='n7758' href='#n7758'>7758</a> <a id='n7759' href='#n7759'>7759</a> <a id='n7760' href='#n7760'>7760</a> <a id='n7761' href='#n7761'>7761</a> <a id='n7762' href='#n7762'>7762</a> <a id='n7763' href='#n7763'>7763</a> <a id='n7764' href='#n7764'>7764</a> <a id='n7765' href='#n7765'>7765</a> <a id='n7766' href='#n7766'>7766</a> <a id='n7767' href='#n7767'>7767</a> <a id='n7768' href='#n7768'>7768</a> <a id='n7769' href='#n7769'>7769</a> <a id='n7770' href='#n7770'>7770</a> <a id='n7771' href='#n7771'>7771</a> <a id='n7772' href='#n7772'>7772</a> <a id='n7773' href='#n7773'>7773</a> <a id='n7774' href='#n7774'>7774</a> <a id='n7775' href='#n7775'>7775</a> <a id='n7776' href='#n7776'>7776</a> <a id='n7777' href='#n7777'>7777</a> <a id='n7778' href='#n7778'>7778</a> <a id='n7779' href='#n7779'>7779</a> <a id='n7780' href='#n7780'>7780</a> <a id='n7781' href='#n7781'>7781</a> <a id='n7782' href='#n7782'>7782</a> <a id='n7783' href='#n7783'>7783</a> <a id='n7784' href='#n7784'>7784</a> <a id='n7785' href='#n7785'>7785</a> <a id='n7786' href='#n7786'>7786</a> <a id='n7787' href='#n7787'>7787</a> <a id='n7788' href='#n7788'>7788</a> <a id='n7789' href='#n7789'>7789</a> <a id='n7790' href='#n7790'>7790</a> <a id='n7791' href='#n7791'>7791</a> <a id='n7792' href='#n7792'>7792</a> <a id='n7793' href='#n7793'>7793</a> <a id='n7794' href='#n7794'>7794</a> <a id='n7795' href='#n7795'>7795</a> <a id='n7796' href='#n7796'>7796</a> <a id='n7797' href='#n7797'>7797</a> <a id='n7798' href='#n7798'>7798</a> <a id='n7799' href='#n7799'>7799</a> <a id='n7800' href='#n7800'>7800</a> <a id='n7801' href='#n7801'>7801</a> <a id='n7802' href='#n7802'>7802</a> <a id='n7803' href='#n7803'>7803</a> <a id='n7804' href='#n7804'>7804</a> <a id='n7805' href='#n7805'>7805</a> <a id='n7806' href='#n7806'>7806</a> <a id='n7807' href='#n7807'>7807</a> <a id='n7808' href='#n7808'>7808</a> <a id='n7809' href='#n7809'>7809</a> <a id='n7810' href='#n7810'>7810</a> <a id='n7811' href='#n7811'>7811</a> <a id='n7812' href='#n7812'>7812</a> <a id='n7813' href='#n7813'>7813</a> <a id='n7814' href='#n7814'>7814</a> <a id='n7815' href='#n7815'>7815</a> <a id='n7816' href='#n7816'>7816</a> <a id='n7817' href='#n7817'>7817</a> <a id='n7818' href='#n7818'>7818</a> <a id='n7819' href='#n7819'>7819</a> <a id='n7820' href='#n7820'>7820</a> <a id='n7821' href='#n7821'>7821</a> <a id='n7822' href='#n7822'>7822</a> <a id='n7823' href='#n7823'>7823</a> <a id='n7824' href='#n7824'>7824</a> <a id='n7825' href='#n7825'>7825</a> <a id='n7826' href='#n7826'>7826</a> <a id='n7827' href='#n7827'>7827</a> <a id='n7828' href='#n7828'>7828</a> <a id='n7829' href='#n7829'>7829</a> <a id='n7830' href='#n7830'>7830</a> <a id='n7831' href='#n7831'>7831</a> <a id='n7832' href='#n7832'>7832</a> <a id='n7833' href='#n7833'>7833</a> <a id='n7834' href='#n7834'>7834</a> <a id='n7835' href='#n7835'>7835</a> <a id='n7836' href='#n7836'>7836</a> <a id='n7837' href='#n7837'>7837</a> <a id='n7838' href='#n7838'>7838</a> <a id='n7839' href='#n7839'>7839</a> <a id='n7840' href='#n7840'>7840</a> <a id='n7841' href='#n7841'>7841</a> <a id='n7842' href='#n7842'>7842</a> <a id='n7843' href='#n7843'>7843</a> <a id='n7844' href='#n7844'>7844</a> <a id='n7845' href='#n7845'>7845</a> <a id='n7846' href='#n7846'>7846</a> <a id='n7847' href='#n7847'>7847</a> <a id='n7848' href='#n7848'>7848</a> <a id='n7849' href='#n7849'>7849</a> <a id='n7850' href='#n7850'>7850</a> <a id='n7851' href='#n7851'>7851</a> <a id='n7852' href='#n7852'>7852</a> <a id='n7853' href='#n7853'>7853</a> <a id='n7854' href='#n7854'>7854</a> <a id='n7855' href='#n7855'>7855</a> <a id='n7856' href='#n7856'>7856</a> <a id='n7857' href='#n7857'>7857</a> <a id='n7858' href='#n7858'>7858</a> <a id='n7859' href='#n7859'>7859</a> <a id='n7860' href='#n7860'>7860</a> <a id='n7861' href='#n7861'>7861</a> <a id='n7862' href='#n7862'>7862</a> <a id='n7863' href='#n7863'>7863</a> <a id='n7864' href='#n7864'>7864</a> <a id='n7865' href='#n7865'>7865</a> <a id='n7866' href='#n7866'>7866</a> <a id='n7867' href='#n7867'>7867</a> <a id='n7868' href='#n7868'>7868</a> <a id='n7869' href='#n7869'>7869</a> <a id='n7870' href='#n7870'>7870</a> <a id='n7871' href='#n7871'>7871</a> <a id='n7872' href='#n7872'>7872</a> <a id='n7873' href='#n7873'>7873</a> <a id='n7874' href='#n7874'>7874</a> <a id='n7875' href='#n7875'>7875</a> <a id='n7876' href='#n7876'>7876</a> <a id='n7877' href='#n7877'>7877</a> <a id='n7878' href='#n7878'>7878</a> <a id='n7879' href='#n7879'>7879</a> <a id='n7880' href='#n7880'>7880</a> <a id='n7881' href='#n7881'>7881</a> <a id='n7882' href='#n7882'>7882</a> <a id='n7883' href='#n7883'>7883</a> <a id='n7884' href='#n7884'>7884</a> <a id='n7885' href='#n7885'>7885</a> <a id='n7886' href='#n7886'>7886</a> <a id='n7887' href='#n7887'>7887</a> <a id='n7888' href='#n7888'>7888</a> <a id='n7889' href='#n7889'>7889</a> <a id='n7890' href='#n7890'>7890</a> <a id='n7891' href='#n7891'>7891</a> <a id='n7892' href='#n7892'>7892</a> <a id='n7893' href='#n7893'>7893</a> <a id='n7894' href='#n7894'>7894</a> <a id='n7895' href='#n7895'>7895</a> <a id='n7896' href='#n7896'>7896</a> <a id='n7897' href='#n7897'>7897</a> <a id='n7898' href='#n7898'>7898</a> <a id='n7899' href='#n7899'>7899</a> <a id='n7900' href='#n7900'>7900</a> <a id='n7901' href='#n7901'>7901</a> <a id='n7902' href='#n7902'>7902</a> <a id='n7903' href='#n7903'>7903</a> <a id='n7904' href='#n7904'>7904</a> <a id='n7905' href='#n7905'>7905</a> <a id='n7906' href='#n7906'>7906</a> <a id='n7907' href='#n7907'>7907</a> <a id='n7908' href='#n7908'>7908</a> <a id='n7909' href='#n7909'>7909</a> <a id='n7910' href='#n7910'>7910</a> <a id='n7911' href='#n7911'>7911</a> <a id='n7912' href='#n7912'>7912</a> <a id='n7913' href='#n7913'>7913</a> <a id='n7914' href='#n7914'>7914</a> <a id='n7915' href='#n7915'>7915</a> <a id='n7916' href='#n7916'>7916</a> <a id='n7917' href='#n7917'>7917</a> <a id='n7918' href='#n7918'>7918</a> <a id='n7919' href='#n7919'>7919</a> <a id='n7920' href='#n7920'>7920</a> <a id='n7921' href='#n7921'>7921</a> <a id='n7922' href='#n7922'>7922</a> <a id='n7923' href='#n7923'>7923</a> <a id='n7924' href='#n7924'>7924</a> <a id='n7925' href='#n7925'>7925</a> <a id='n7926' href='#n7926'>7926</a> <a id='n7927' href='#n7927'>7927</a> <a id='n7928' href='#n7928'>7928</a> <a id='n7929' href='#n7929'>7929</a> <a id='n7930' href='#n7930'>7930</a> <a id='n7931' href='#n7931'>7931</a> <a id='n7932' href='#n7932'>7932</a> <a id='n7933' href='#n7933'>7933</a> <a id='n7934' href='#n7934'>7934</a> <a id='n7935' href='#n7935'>7935</a> <a id='n7936' href='#n7936'>7936</a> <a id='n7937' href='#n7937'>7937</a> <a id='n7938' href='#n7938'>7938</a> <a id='n7939' href='#n7939'>7939</a> <a id='n7940' href='#n7940'>7940</a> <a id='n7941' href='#n7941'>7941</a> <a id='n7942' href='#n7942'>7942</a> <a id='n7943' href='#n7943'>7943</a> <a id='n7944' href='#n7944'>7944</a> <a id='n7945' href='#n7945'>7945</a> <a id='n7946' href='#n7946'>7946</a> <a id='n7947' href='#n7947'>7947</a> <a id='n7948' href='#n7948'>7948</a> <a id='n7949' href='#n7949'>7949</a> <a id='n7950' href='#n7950'>7950</a> <a id='n7951' href='#n7951'>7951</a> <a id='n7952' href='#n7952'>7952</a> <a id='n7953' href='#n7953'>7953</a> <a id='n7954' href='#n7954'>7954</a> <a id='n7955' href='#n7955'>7955</a> <a id='n7956' href='#n7956'>7956</a> <a id='n7957' href='#n7957'>7957</a> <a id='n7958' href='#n7958'>7958</a> <a id='n7959' href='#n7959'>7959</a> <a id='n7960' href='#n7960'>7960</a> <a id='n7961' href='#n7961'>7961</a> <a id='n7962' href='#n7962'>7962</a> <a id='n7963' href='#n7963'>7963</a> <a id='n7964' href='#n7964'>7964</a> <a id='n7965' href='#n7965'>7965</a> <a id='n7966' href='#n7966'>7966</a> <a id='n7967' href='#n7967'>7967</a> <a id='n7968' href='#n7968'>7968</a> <a id='n7969' href='#n7969'>7969</a> <a id='n7970' href='#n7970'>7970</a> <a id='n7971' href='#n7971'>7971</a> <a id='n7972' href='#n7972'>7972</a> <a id='n7973' href='#n7973'>7973</a> <a id='n7974' href='#n7974'>7974</a> <a id='n7975' href='#n7975'>7975</a> <a id='n7976' href='#n7976'>7976</a> <a id='n7977' href='#n7977'>7977</a> <a id='n7978' href='#n7978'>7978</a> <a id='n7979' href='#n7979'>7979</a> <a id='n7980' href='#n7980'>7980</a> <a id='n7981' href='#n7981'>7981</a> <a id='n7982' href='#n7982'>7982</a> <a id='n7983' href='#n7983'>7983</a> <a id='n7984' href='#n7984'>7984</a> <a id='n7985' href='#n7985'>7985</a> <a id='n7986' href='#n7986'>7986</a> <a id='n7987' href='#n7987'>7987</a> <a id='n7988' href='#n7988'>7988</a> <a id='n7989' href='#n7989'>7989</a> <a id='n7990' href='#n7990'>7990</a> <a id='n7991' href='#n7991'>7991</a> <a id='n7992' href='#n7992'>7992</a> <a id='n7993' href='#n7993'>7993</a> <a id='n7994' href='#n7994'>7994</a> <a id='n7995' href='#n7995'>7995</a> <a id='n7996' href='#n7996'>7996</a> <a id='n7997' href='#n7997'>7997</a> <a id='n7998' href='#n7998'>7998</a> <a id='n7999' href='#n7999'>7999</a> <a id='n8000' href='#n8000'>8000</a> <a id='n8001' href='#n8001'>8001</a> <a id='n8002' href='#n8002'>8002</a> <a id='n8003' href='#n8003'>8003</a> <a id='n8004' href='#n8004'>8004</a> <a id='n8005' href='#n8005'>8005</a> <a id='n8006' href='#n8006'>8006</a> <a id='n8007' href='#n8007'>8007</a> <a id='n8008' href='#n8008'>8008</a> <a id='n8009' href='#n8009'>8009</a> <a id='n8010' href='#n8010'>8010</a> <a id='n8011' href='#n8011'>8011</a> <a id='n8012' href='#n8012'>8012</a> <a id='n8013' href='#n8013'>8013</a> <a id='n8014' href='#n8014'>8014</a> <a id='n8015' href='#n8015'>8015</a> <a id='n8016' href='#n8016'>8016</a> <a id='n8017' href='#n8017'>8017</a> <a id='n8018' href='#n8018'>8018</a> <a id='n8019' href='#n8019'>8019</a> <a id='n8020' href='#n8020'>8020</a> <a id='n8021' href='#n8021'>8021</a> <a id='n8022' href='#n8022'>8022</a> <a id='n8023' href='#n8023'>8023</a> <a id='n8024' href='#n8024'>8024</a> <a id='n8025' href='#n8025'>8025</a> <a id='n8026' href='#n8026'>8026</a> <a id='n8027' href='#n8027'>8027</a> <a id='n8028' href='#n8028'>8028</a> <a id='n8029' href='#n8029'>8029</a> <a id='n8030' href='#n8030'>8030</a> <a id='n8031' href='#n8031'>8031</a> <a id='n8032' href='#n8032'>8032</a> <a id='n8033' href='#n8033'>8033</a> <a id='n8034' href='#n8034'>8034</a> <a id='n8035' href='#n8035'>8035</a> <a id='n8036' href='#n8036'>8036</a> <a id='n8037' href='#n8037'>8037</a> <a id='n8038' href='#n8038'>8038</a> <a id='n8039' href='#n8039'>8039</a> <a id='n8040' href='#n8040'>8040</a> <a id='n8041' href='#n8041'>8041</a> <a id='n8042' href='#n8042'>8042</a> <a id='n8043' href='#n8043'>8043</a> <a id='n8044' href='#n8044'>8044</a> <a id='n8045' href='#n8045'>8045</a> <a id='n8046' href='#n8046'>8046</a> <a id='n8047' href='#n8047'>8047</a> <a id='n8048' href='#n8048'>8048</a> <a id='n8049' href='#n8049'>8049</a> <a id='n8050' href='#n8050'>8050</a> <a id='n8051' href='#n8051'>8051</a> <a id='n8052' href='#n8052'>8052</a> <a id='n8053' href='#n8053'>8053</a> <a id='n8054' href='#n8054'>8054</a> <a id='n8055' href='#n8055'>8055</a> <a id='n8056' href='#n8056'>8056</a> <a id='n8057' href='#n8057'>8057</a> <a id='n8058' href='#n8058'>8058</a> <a id='n8059' href='#n8059'>8059</a> <a id='n8060' href='#n8060'>8060</a> <a id='n8061' href='#n8061'>8061</a> <a id='n8062' href='#n8062'>8062</a> <a id='n8063' href='#n8063'>8063</a> <a id='n8064' href='#n8064'>8064</a> <a id='n8065' href='#n8065'>8065</a> <a id='n8066' href='#n8066'>8066</a> <a id='n8067' href='#n8067'>8067</a> <a id='n8068' href='#n8068'>8068</a> <a id='n8069' href='#n8069'>8069</a> <a id='n8070' href='#n8070'>8070</a> <a id='n8071' href='#n8071'>8071</a> <a id='n8072' href='#n8072'>8072</a> <a id='n8073' href='#n8073'>8073</a> <a id='n8074' href='#n8074'>8074</a> <a id='n8075' href='#n8075'>8075</a> <a id='n8076' href='#n8076'>8076</a> <a id='n8077' href='#n8077'>8077</a> <a id='n8078' href='#n8078'>8078</a> <a id='n8079' href='#n8079'>8079</a> <a id='n8080' href='#n8080'>8080</a> <a id='n8081' href='#n8081'>8081</a> <a id='n8082' href='#n8082'>8082</a> <a id='n8083' href='#n8083'>8083</a> <a id='n8084' href='#n8084'>8084</a> <a id='n8085' href='#n8085'>8085</a> <a id='n8086' href='#n8086'>8086</a> <a id='n8087' href='#n8087'>8087</a> <a id='n8088' href='#n8088'>8088</a> <a id='n8089' href='#n8089'>8089</a> <a id='n8090' href='#n8090'>8090</a> <a id='n8091' href='#n8091'>8091</a> <a id='n8092' href='#n8092'>8092</a> <a id='n8093' href='#n8093'>8093</a> <a id='n8094' href='#n8094'>8094</a> <a id='n8095' href='#n8095'>8095</a> <a id='n8096' href='#n8096'>8096</a> <a id='n8097' href='#n8097'>8097</a> <a id='n8098' href='#n8098'>8098</a> <a id='n8099' href='#n8099'>8099</a> <a id='n8100' href='#n8100'>8100</a> <a id='n8101' href='#n8101'>8101</a> <a id='n8102' href='#n8102'>8102</a> <a id='n8103' href='#n8103'>8103</a> <a id='n8104' href='#n8104'>8104</a> <a id='n8105' href='#n8105'>8105</a> <a id='n8106' href='#n8106'>8106</a> <a id='n8107' href='#n8107'>8107</a> <a id='n8108' href='#n8108'>8108</a> <a id='n8109' href='#n8109'>8109</a> <a id='n8110' href='#n8110'>8110</a> <a id='n8111' href='#n8111'>8111</a> <a id='n8112' href='#n8112'>8112</a> <a id='n8113' href='#n8113'>8113</a> <a id='n8114' href='#n8114'>8114</a> <a id='n8115' href='#n8115'>8115</a> <a id='n8116' href='#n8116'>8116</a> <a id='n8117' href='#n8117'>8117</a> <a id='n8118' href='#n8118'>8118</a> <a id='n8119' href='#n8119'>8119</a> <a id='n8120' href='#n8120'>8120</a> <a id='n8121' href='#n8121'>8121</a> <a id='n8122' href='#n8122'>8122</a> <a id='n8123' href='#n8123'>8123</a> <a id='n8124' href='#n8124'>8124</a> <a id='n8125' href='#n8125'>8125</a> <a id='n8126' href='#n8126'>8126</a> <a id='n8127' href='#n8127'>8127</a> <a id='n8128' href='#n8128'>8128</a> <a id='n8129' href='#n8129'>8129</a> <a id='n8130' href='#n8130'>8130</a> <a id='n8131' href='#n8131'>8131</a> <a id='n8132' href='#n8132'>8132</a> <a id='n8133' href='#n8133'>8133</a> <a id='n8134' href='#n8134'>8134</a> <a id='n8135' href='#n8135'>8135</a> <a id='n8136' href='#n8136'>8136</a> <a id='n8137' href='#n8137'>8137</a> <a id='n8138' href='#n8138'>8138</a> <a id='n8139' href='#n8139'>8139</a> <a id='n8140' href='#n8140'>8140</a> <a id='n8141' href='#n8141'>8141</a> <a id='n8142' href='#n8142'>8142</a> <a id='n8143' href='#n8143'>8143</a> <a id='n8144' href='#n8144'>8144</a> <a id='n8145' href='#n8145'>8145</a> <a id='n8146' href='#n8146'>8146</a> <a id='n8147' href='#n8147'>8147</a> <a id='n8148' href='#n8148'>8148</a> <a id='n8149' href='#n8149'>8149</a> <a id='n8150' href='#n8150'>8150</a> <a id='n8151' href='#n8151'>8151</a> <a id='n8152' href='#n8152'>8152</a> <a id='n8153' href='#n8153'>8153</a> <a id='n8154' href='#n8154'>8154</a> <a id='n8155' href='#n8155'>8155</a> <a id='n8156' href='#n8156'>8156</a> <a id='n8157' href='#n8157'>8157</a> <a id='n8158' href='#n8158'>8158</a> <a id='n8159' href='#n8159'>8159</a> <a id='n8160' href='#n8160'>8160</a> <a id='n8161' href='#n8161'>8161</a> <a id='n8162' href='#n8162'>8162</a> <a id='n8163' href='#n8163'>8163</a> <a id='n8164' href='#n8164'>8164</a> <a id='n8165' href='#n8165'>8165</a> <a id='n8166' href='#n8166'>8166</a> <a id='n8167' href='#n8167'>8167</a> <a id='n8168' href='#n8168'>8168</a> <a id='n8169' href='#n8169'>8169</a> <a id='n8170' href='#n8170'>8170</a> <a id='n8171' href='#n8171'>8171</a> <a id='n8172' href='#n8172'>8172</a> <a id='n8173' href='#n8173'>8173</a> <a id='n8174' href='#n8174'>8174</a> <a id='n8175' href='#n8175'>8175</a> <a id='n8176' href='#n8176'>8176</a> <a id='n8177' href='#n8177'>8177</a> <a id='n8178' href='#n8178'>8178</a> <a id='n8179' href='#n8179'>8179</a> <a id='n8180' href='#n8180'>8180</a> <a id='n8181' href='#n8181'>8181</a> <a id='n8182' href='#n8182'>8182</a> <a id='n8183' href='#n8183'>8183</a> <a id='n8184' href='#n8184'>8184</a> <a id='n8185' href='#n8185'>8185</a> <a id='n8186' href='#n8186'>8186</a> <a id='n8187' href='#n8187'>8187</a> <a id='n8188' href='#n8188'>8188</a> <a id='n8189' href='#n8189'>8189</a> <a id='n8190' href='#n8190'>8190</a> <a id='n8191' href='#n8191'>8191</a> <a id='n8192' href='#n8192'>8192</a> <a id='n8193' href='#n8193'>8193</a> <a id='n8194' href='#n8194'>8194</a> <a id='n8195' href='#n8195'>8195</a> <a id='n8196' href='#n8196'>8196</a> <a id='n8197' href='#n8197'>8197</a> <a id='n8198' href='#n8198'>8198</a> <a id='n8199' href='#n8199'>8199</a> <a id='n8200' href='#n8200'>8200</a> <a id='n8201' href='#n8201'>8201</a> <a id='n8202' href='#n8202'>8202</a> <a id='n8203' href='#n8203'>8203</a> <a id='n8204' href='#n8204'>8204</a> <a id='n8205' href='#n8205'>8205</a> <a id='n8206' href='#n8206'>8206</a> <a id='n8207' href='#n8207'>8207</a> <a id='n8208' href='#n8208'>8208</a> <a id='n8209' href='#n8209'>8209</a> <a id='n8210' href='#n8210'>8210</a> <a id='n8211' href='#n8211'>8211</a> <a id='n8212' href='#n8212'>8212</a> <a id='n8213' href='#n8213'>8213</a> <a id='n8214' href='#n8214'>8214</a> <a id='n8215' href='#n8215'>8215</a> <a id='n8216' href='#n8216'>8216</a> <a id='n8217' href='#n8217'>8217</a> <a id='n8218' href='#n8218'>8218</a> <a id='n8219' href='#n8219'>8219</a> <a id='n8220' href='#n8220'>8220</a> <a id='n8221' href='#n8221'>8221</a> <a id='n8222' href='#n8222'>8222</a> <a id='n8223' href='#n8223'>8223</a> <a id='n8224' href='#n8224'>8224</a> <a id='n8225' href='#n8225'>8225</a> <a id='n8226' href='#n8226'>8226</a> <a id='n8227' href='#n8227'>8227</a> <a id='n8228' href='#n8228'>8228</a> <a id='n8229' href='#n8229'>8229</a> <a id='n8230' href='#n8230'>8230</a> <a id='n8231' href='#n8231'>8231</a> <a id='n8232' href='#n8232'>8232</a> <a id='n8233' href='#n8233'>8233</a> <a id='n8234' href='#n8234'>8234</a> <a id='n8235' href='#n8235'>8235</a> <a id='n8236' href='#n8236'>8236</a> <a id='n8237' href='#n8237'>8237</a> <a id='n8238' href='#n8238'>8238</a> <a id='n8239' href='#n8239'>8239</a> <a id='n8240' href='#n8240'>8240</a> <a id='n8241' href='#n8241'>8241</a> <a id='n8242' href='#n8242'>8242</a> <a id='n8243' href='#n8243'>8243</a> <a id='n8244' href='#n8244'>8244</a> <a id='n8245' href='#n8245'>8245</a> <a id='n8246' href='#n8246'>8246</a> <a id='n8247' href='#n8247'>8247</a> <a id='n8248' href='#n8248'>8248</a> <a id='n8249' href='#n8249'>8249</a> <a id='n8250' href='#n8250'>8250</a> <a id='n8251' href='#n8251'>8251</a> <a id='n8252' href='#n8252'>8252</a> <a id='n8253' href='#n8253'>8253</a> <a id='n8254' href='#n8254'>8254</a> <a id='n8255' href='#n8255'>8255</a> <a id='n8256' href='#n8256'>8256</a> <a id='n8257' href='#n8257'>8257</a> <a id='n8258' href='#n8258'>8258</a> <a id='n8259' href='#n8259'>8259</a> <a id='n8260' href='#n8260'>8260</a> <a id='n8261' href='#n8261'>8261</a> <a id='n8262' href='#n8262'>8262</a> <a id='n8263' href='#n8263'>8263</a> <a id='n8264' href='#n8264'>8264</a> <a id='n8265' href='#n8265'>8265</a> <a id='n8266' href='#n8266'>8266</a> <a id='n8267' href='#n8267'>8267</a> <a id='n8268' href='#n8268'>8268</a> <a id='n8269' href='#n8269'>8269</a> <a id='n8270' href='#n8270'>8270</a> <a id='n8271' href='#n8271'>8271</a> <a id='n8272' href='#n8272'>8272</a> <a id='n8273' href='#n8273'>8273</a> <a id='n8274' href='#n8274'>8274</a> <a id='n8275' href='#n8275'>8275</a> <a id='n8276' href='#n8276'>8276</a> <a id='n8277' href='#n8277'>8277</a> <a id='n8278' href='#n8278'>8278</a> <a id='n8279' href='#n8279'>8279</a> <a id='n8280' href='#n8280'>8280</a> <a id='n8281' href='#n8281'>8281</a> <a id='n8282' href='#n8282'>8282</a> <a id='n8283' href='#n8283'>8283</a> <a id='n8284' href='#n8284'>8284</a> <a id='n8285' href='#n8285'>8285</a> <a id='n8286' href='#n8286'>8286</a> <a id='n8287' href='#n8287'>8287</a> <a id='n8288' href='#n8288'>8288</a> <a id='n8289' href='#n8289'>8289</a> <a id='n8290' href='#n8290'>8290</a> <a id='n8291' href='#n8291'>8291</a> <a id='n8292' href='#n8292'>8292</a> <a id='n8293' href='#n8293'>8293</a> <a id='n8294' href='#n8294'>8294</a> <a id='n8295' href='#n8295'>8295</a> <a id='n8296' href='#n8296'>8296</a> <a id='n8297' href='#n8297'>8297</a> <a id='n8298' href='#n8298'>8298</a> <a id='n8299' href='#n8299'>8299</a> <a id='n8300' href='#n8300'>8300</a> <a id='n8301' href='#n8301'>8301</a> <a id='n8302' href='#n8302'>8302</a> <a id='n8303' href='#n8303'>8303</a> <a id='n8304' href='#n8304'>8304</a> <a id='n8305' href='#n8305'>8305</a> <a id='n8306' href='#n8306'>8306</a> <a id='n8307' href='#n8307'>8307</a> <a id='n8308' href='#n8308'>8308</a> <a id='n8309' href='#n8309'>8309</a> <a id='n8310' href='#n8310'>8310</a> <a id='n8311' href='#n8311'>8311</a> <a id='n8312' href='#n8312'>8312</a> <a id='n8313' href='#n8313'>8313</a> <a id='n8314' href='#n8314'>8314</a> <a id='n8315' href='#n8315'>8315</a> <a id='n8316' href='#n8316'>8316</a> <a id='n8317' href='#n8317'>8317</a> <a id='n8318' href='#n8318'>8318</a> <a id='n8319' href='#n8319'>8319</a> <a id='n8320' href='#n8320'>8320</a> <a id='n8321' href='#n8321'>8321</a> <a id='n8322' href='#n8322'>8322</a> <a id='n8323' href='#n8323'>8323</a> <a id='n8324' href='#n8324'>8324</a> <a id='n8325' href='#n8325'>8325</a> <a id='n8326' href='#n8326'>8326</a> <a id='n8327' href='#n8327'>8327</a> <a id='n8328' href='#n8328'>8328</a> <a id='n8329' href='#n8329'>8329</a> <a id='n8330' href='#n8330'>8330</a> <a id='n8331' href='#n8331'>8331</a> <a id='n8332' href='#n8332'>8332</a> <a id='n8333' href='#n8333'>8333</a> <a id='n8334' href='#n8334'>8334</a> <a id='n8335' href='#n8335'>8335</a> <a id='n8336' href='#n8336'>8336</a> <a id='n8337' href='#n8337'>8337</a> <a id='n8338' href='#n8338'>8338</a> <a id='n8339' href='#n8339'>8339</a> <a id='n8340' href='#n8340'>8340</a> <a id='n8341' href='#n8341'>8341</a> <a id='n8342' href='#n8342'>8342</a> <a id='n8343' href='#n8343'>8343</a> <a id='n8344' href='#n8344'>8344</a> <a id='n8345' href='#n8345'>8345</a> <a id='n8346' href='#n8346'>8346</a> <a id='n8347' href='#n8347'>8347</a> <a id='n8348' href='#n8348'>8348</a> <a id='n8349' href='#n8349'>8349</a> <a id='n8350' href='#n8350'>8350</a> <a id='n8351' href='#n8351'>8351</a> <a id='n8352' href='#n8352'>8352</a> <a id='n8353' href='#n8353'>8353</a> <a id='n8354' href='#n8354'>8354</a> <a id='n8355' href='#n8355'>8355</a> <a id='n8356' href='#n8356'>8356</a> <a id='n8357' href='#n8357'>8357</a> <a id='n8358' href='#n8358'>8358</a> <a id='n8359' href='#n8359'>8359</a> <a id='n8360' href='#n8360'>8360</a> <a id='n8361' href='#n8361'>8361</a> <a id='n8362' href='#n8362'>8362</a> <a id='n8363' href='#n8363'>8363</a> <a id='n8364' href='#n8364'>8364</a> <a id='n8365' href='#n8365'>8365</a> <a id='n8366' href='#n8366'>8366</a> <a id='n8367' href='#n8367'>8367</a> <a id='n8368' href='#n8368'>8368</a> <a id='n8369' href='#n8369'>8369</a> <a id='n8370' href='#n8370'>8370</a> <a id='n8371' href='#n8371'>8371</a> <a id='n8372' href='#n8372'>8372</a> <a id='n8373' href='#n8373'>8373</a> <a id='n8374' href='#n8374'>8374</a> <a id='n8375' href='#n8375'>8375</a> <a id='n8376' href='#n8376'>8376</a> <a id='n8377' href='#n8377'>8377</a> <a id='n8378' href='#n8378'>8378</a> <a id='n8379' href='#n8379'>8379</a> <a id='n8380' href='#n8380'>8380</a> <a id='n8381' href='#n8381'>8381</a> <a id='n8382' href='#n8382'>8382</a> <a id='n8383' href='#n8383'>8383</a> <a id='n8384' href='#n8384'>8384</a> <a id='n8385' href='#n8385'>8385</a> <a id='n8386' href='#n8386'>8386</a> <a id='n8387' href='#n8387'>8387</a> <a id='n8388' href='#n8388'>8388</a> <a id='n8389' href='#n8389'>8389</a> <a id='n8390' href='#n8390'>8390</a> <a id='n8391' href='#n8391'>8391</a> <a id='n8392' href='#n8392'>8392</a> <a id='n8393' href='#n8393'>8393</a> <a id='n8394' href='#n8394'>8394</a> <a id='n8395' href='#n8395'>8395</a> <a id='n8396' href='#n8396'>8396</a> <a id='n8397' href='#n8397'>8397</a> <a id='n8398' href='#n8398'>8398</a> <a id='n8399' href='#n8399'>8399</a> <a id='n8400' href='#n8400'>8400</a> <a id='n8401' href='#n8401'>8401</a> <a id='n8402' href='#n8402'>8402</a> <a id='n8403' href='#n8403'>8403</a> <a id='n8404' href='#n8404'>8404</a> <a id='n8405' href='#n8405'>8405</a> <a id='n8406' href='#n8406'>8406</a> <a id='n8407' href='#n8407'>8407</a> <a id='n8408' href='#n8408'>8408</a> <a id='n8409' href='#n8409'>8409</a> <a id='n8410' href='#n8410'>8410</a> <a id='n8411' href='#n8411'>8411</a> <a id='n8412' href='#n8412'>8412</a> <a id='n8413' href='#n8413'>8413</a> <a id='n8414' href='#n8414'>8414</a> <a id='n8415' href='#n8415'>8415</a> <a id='n8416' href='#n8416'>8416</a> <a id='n8417' href='#n8417'>8417</a> <a id='n8418' href='#n8418'>8418</a> <a id='n8419' href='#n8419'>8419</a> <a id='n8420' href='#n8420'>8420</a> <a id='n8421' href='#n8421'>8421</a> <a id='n8422' href='#n8422'>8422</a> <a id='n8423' href='#n8423'>8423</a> <a id='n8424' href='#n8424'>8424</a> <a id='n8425' href='#n8425'>8425</a> <a id='n8426' href='#n8426'>8426</a> <a id='n8427' href='#n8427'>8427</a> <a id='n8428' href='#n8428'>8428</a> <a id='n8429' href='#n8429'>8429</a> <a id='n8430' href='#n8430'>8430</a> <a id='n8431' href='#n8431'>8431</a> <a id='n8432' href='#n8432'>8432</a> <a id='n8433' href='#n8433'>8433</a> <a id='n8434' href='#n8434'>8434</a> <a id='n8435' href='#n8435'>8435</a> <a id='n8436' href='#n8436'>8436</a> <a id='n8437' href='#n8437'>8437</a> <a id='n8438' href='#n8438'>8438</a> <a id='n8439' href='#n8439'>8439</a> <a id='n8440' href='#n8440'>8440</a> <a id='n8441' href='#n8441'>8441</a> <a id='n8442' href='#n8442'>8442</a> <a id='n8443' href='#n8443'>8443</a> <a id='n8444' href='#n8444'>8444</a> <a id='n8445' href='#n8445'>8445</a> <a id='n8446' href='#n8446'>8446</a> <a id='n8447' href='#n8447'>8447</a> <a id='n8448' href='#n8448'>8448</a> <a id='n8449' href='#n8449'>8449</a> <a id='n8450' href='#n8450'>8450</a> <a id='n8451' href='#n8451'>8451</a> <a id='n8452' href='#n8452'>8452</a> <a id='n8453' href='#n8453'>8453</a> <a id='n8454' href='#n8454'>8454</a> <a id='n8455' href='#n8455'>8455</a> <a id='n8456' href='#n8456'>8456</a> <a id='n8457' href='#n8457'>8457</a> <a id='n8458' href='#n8458'>8458</a> <a id='n8459' href='#n8459'>8459</a> <a id='n8460' href='#n8460'>8460</a> <a id='n8461' href='#n8461'>8461</a> <a id='n8462' href='#n8462'>8462</a> <a id='n8463' href='#n8463'>8463</a> <a id='n8464' href='#n8464'>8464</a> <a id='n8465' href='#n8465'>8465</a> <a id='n8466' href='#n8466'>8466</a> <a id='n8467' href='#n8467'>8467</a> <a id='n8468' href='#n8468'>8468</a> <a id='n8469' href='#n8469'>8469</a> <a id='n8470' href='#n8470'>8470</a> <a id='n8471' href='#n8471'>8471</a> <a id='n8472' href='#n8472'>8472</a> <a id='n8473' href='#n8473'>8473</a> <a id='n8474' href='#n8474'>8474</a> <a id='n8475' href='#n8475'>8475</a> <a id='n8476' href='#n8476'>8476</a> <a id='n8477' href='#n8477'>8477</a> <a id='n8478' href='#n8478'>8478</a> <a id='n8479' href='#n8479'>8479</a> <a id='n8480' href='#n8480'>8480</a> <a id='n8481' href='#n8481'>8481</a> <a id='n8482' href='#n8482'>8482</a> <a id='n8483' href='#n8483'>8483</a> <a id='n8484' href='#n8484'>8484</a> <a id='n8485' href='#n8485'>8485</a> <a id='n8486' href='#n8486'>8486</a> <a id='n8487' href='#n8487'>8487</a> <a id='n8488' href='#n8488'>8488</a> <a id='n8489' href='#n8489'>8489</a> <a id='n8490' href='#n8490'>8490</a> <a id='n8491' href='#n8491'>8491</a> <a id='n8492' href='#n8492'>8492</a> <a id='n8493' href='#n8493'>8493</a> <a id='n8494' href='#n8494'>8494</a> <a id='n8495' href='#n8495'>8495</a> <a id='n8496' href='#n8496'>8496</a> <a id='n8497' href='#n8497'>8497</a> <a id='n8498' href='#n8498'>8498</a> <a id='n8499' href='#n8499'>8499</a> <a id='n8500' href='#n8500'>8500</a> <a id='n8501' href='#n8501'>8501</a> <a id='n8502' href='#n8502'>8502</a> <a id='n8503' href='#n8503'>8503</a> <a id='n8504' href='#n8504'>8504</a> <a id='n8505' href='#n8505'>8505</a> <a id='n8506' href='#n8506'>8506</a> <a id='n8507' href='#n8507'>8507</a> <a id='n8508' href='#n8508'>8508</a> <a id='n8509' href='#n8509'>8509</a> <a id='n8510' href='#n8510'>8510</a> <a id='n8511' href='#n8511'>8511</a> <a id='n8512' href='#n8512'>8512</a> <a id='n8513' href='#n8513'>8513</a> <a id='n8514' href='#n8514'>8514</a> <a id='n8515' href='#n8515'>8515</a> <a id='n8516' href='#n8516'>8516</a> <a id='n8517' href='#n8517'>8517</a> <a id='n8518' href='#n8518'>8518</a> <a id='n8519' href='#n8519'>8519</a> <a id='n8520' href='#n8520'>8520</a> <a id='n8521' href='#n8521'>8521</a> <a id='n8522' href='#n8522'>8522</a> <a id='n8523' href='#n8523'>8523</a> <a id='n8524' href='#n8524'>8524</a> <a id='n8525' href='#n8525'>8525</a> <a id='n8526' href='#n8526'>8526</a> <a id='n8527' href='#n8527'>8527</a> <a id='n8528' href='#n8528'>8528</a> <a id='n8529' href='#n8529'>8529</a> <a id='n8530' href='#n8530'>8530</a> <a id='n8531' href='#n8531'>8531</a> <a id='n8532' href='#n8532'>8532</a> <a id='n8533' href='#n8533'>8533</a> <a id='n8534' href='#n8534'>8534</a> <a id='n8535' href='#n8535'>8535</a> <a id='n8536' href='#n8536'>8536</a> <a id='n8537' href='#n8537'>8537</a> <a id='n8538' href='#n8538'>8538</a> <a id='n8539' href='#n8539'>8539</a> <a id='n8540' href='#n8540'>8540</a> <a id='n8541' href='#n8541'>8541</a> <a id='n8542' href='#n8542'>8542</a> <a id='n8543' href='#n8543'>8543</a> <a id='n8544' href='#n8544'>8544</a> <a id='n8545' href='#n8545'>8545</a> <a id='n8546' href='#n8546'>8546</a> <a id='n8547' href='#n8547'>8547</a> <a id='n8548' href='#n8548'>8548</a> <a id='n8549' href='#n8549'>8549</a> <a id='n8550' href='#n8550'>8550</a> <a id='n8551' href='#n8551'>8551</a> <a id='n8552' href='#n8552'>8552</a> <a id='n8553' href='#n8553'>8553</a> <a id='n8554' href='#n8554'>8554</a> <a id='n8555' href='#n8555'>8555</a> <a id='n8556' href='#n8556'>8556</a> <a id='n8557' href='#n8557'>8557</a> <a id='n8558' href='#n8558'>8558</a> <a id='n8559' href='#n8559'>8559</a> <a id='n8560' href='#n8560'>8560</a> <a id='n8561' href='#n8561'>8561</a> <a id='n8562' href='#n8562'>8562</a> <a id='n8563' href='#n8563'>8563</a> <a id='n8564' href='#n8564'>8564</a> <a id='n8565' href='#n8565'>8565</a> <a id='n8566' href='#n8566'>8566</a> <a id='n8567' href='#n8567'>8567</a> <a id='n8568' href='#n8568'>8568</a> <a id='n8569' href='#n8569'>8569</a> <a id='n8570' href='#n8570'>8570</a> <a id='n8571' href='#n8571'>8571</a> <a id='n8572' href='#n8572'>8572</a> <a id='n8573' href='#n8573'>8573</a> <a id='n8574' href='#n8574'>8574</a> <a id='n8575' href='#n8575'>8575</a> <a id='n8576' href='#n8576'>8576</a> <a id='n8577' href='#n8577'>8577</a> <a id='n8578' href='#n8578'>8578</a> <a id='n8579' href='#n8579'>8579</a> <a id='n8580' href='#n8580'>8580</a> <a id='n8581' href='#n8581'>8581</a> <a id='n8582' href='#n8582'>8582</a> <a id='n8583' href='#n8583'>8583</a> <a id='n8584' href='#n8584'>8584</a> <a id='n8585' href='#n8585'>8585</a> <a id='n8586' href='#n8586'>8586</a> <a id='n8587' href='#n8587'>8587</a> <a id='n8588' href='#n8588'>8588</a> <a id='n8589' href='#n8589'>8589</a> <a id='n8590' href='#n8590'>8590</a> <a id='n8591' href='#n8591'>8591</a> <a id='n8592' href='#n8592'>8592</a> <a id='n8593' href='#n8593'>8593</a> <a id='n8594' href='#n8594'>8594</a> <a id='n8595' href='#n8595'>8595</a> <a id='n8596' href='#n8596'>8596</a> <a id='n8597' href='#n8597'>8597</a> <a id='n8598' href='#n8598'>8598</a> <a id='n8599' href='#n8599'>8599</a> <a id='n8600' href='#n8600'>8600</a> <a id='n8601' href='#n8601'>8601</a> <a id='n8602' href='#n8602'>8602</a> <a id='n8603' href='#n8603'>8603</a> <a id='n8604' href='#n8604'>8604</a> <a id='n8605' href='#n8605'>8605</a> <a id='n8606' href='#n8606'>8606</a> <a id='n8607' href='#n8607'>8607</a> <a id='n8608' href='#n8608'>8608</a> <a id='n8609' href='#n8609'>8609</a> <a id='n8610' href='#n8610'>8610</a> <a id='n8611' href='#n8611'>8611</a> <a id='n8612' href='#n8612'>8612</a> <a id='n8613' href='#n8613'>8613</a> <a id='n8614' href='#n8614'>8614</a> <a id='n8615' href='#n8615'>8615</a> <a id='n8616' href='#n8616'>8616</a> <a id='n8617' href='#n8617'>8617</a> <a id='n8618' href='#n8618'>8618</a> <a id='n8619' href='#n8619'>8619</a> <a id='n8620' href='#n8620'>8620</a> <a id='n8621' href='#n8621'>8621</a> <a id='n8622' href='#n8622'>8622</a> <a id='n8623' href='#n8623'>8623</a> <a id='n8624' href='#n8624'>8624</a> <a id='n8625' href='#n8625'>8625</a> <a id='n8626' href='#n8626'>8626</a> <a id='n8627' href='#n8627'>8627</a> <a id='n8628' href='#n8628'>8628</a> <a id='n8629' href='#n8629'>8629</a> <a id='n8630' href='#n8630'>8630</a> <a id='n8631' href='#n8631'>8631</a> <a id='n8632' href='#n8632'>8632</a> <a id='n8633' href='#n8633'>8633</a> <a id='n8634' href='#n8634'>8634</a> <a id='n8635' href='#n8635'>8635</a> <a id='n8636' href='#n8636'>8636</a> <a id='n8637' href='#n8637'>8637</a> <a id='n8638' href='#n8638'>8638</a> <a id='n8639' href='#n8639'>8639</a> <a id='n8640' href='#n8640'>8640</a> <a id='n8641' href='#n8641'>8641</a> <a id='n8642' href='#n8642'>8642</a> <a id='n8643' href='#n8643'>8643</a> <a id='n8644' href='#n8644'>8644</a> <a id='n8645' href='#n8645'>8645</a> <a id='n8646' href='#n8646'>8646</a> <a id='n8647' href='#n8647'>8647</a> <a id='n8648' href='#n8648'>8648</a> <a id='n8649' href='#n8649'>8649</a> <a id='n8650' href='#n8650'>8650</a> <a id='n8651' href='#n8651'>8651</a> <a id='n8652' href='#n8652'>8652</a> <a id='n8653' href='#n8653'>8653</a> <a id='n8654' href='#n8654'>8654</a> <a id='n8655' href='#n8655'>8655</a> <a id='n8656' href='#n8656'>8656</a> <a id='n8657' href='#n8657'>8657</a> <a id='n8658' href='#n8658'>8658</a> <a id='n8659' href='#n8659'>8659</a> <a id='n8660' href='#n8660'>8660</a> <a id='n8661' href='#n8661'>8661</a> <a id='n8662' href='#n8662'>8662</a> <a id='n8663' href='#n8663'>8663</a> <a id='n8664' href='#n8664'>8664</a> <a id='n8665' href='#n8665'>8665</a> <a id='n8666' href='#n8666'>8666</a> <a id='n8667' href='#n8667'>8667</a> <a id='n8668' href='#n8668'>8668</a> <a id='n8669' href='#n8669'>8669</a> <a id='n8670' href='#n8670'>8670</a> <a id='n8671' href='#n8671'>8671</a> <a id='n8672' href='#n8672'>8672</a> <a id='n8673' href='#n8673'>8673</a> <a id='n8674' href='#n8674'>8674</a> <a id='n8675' href='#n8675'>8675</a> <a id='n8676' href='#n8676'>8676</a> <a id='n8677' href='#n8677'>8677</a> <a id='n8678' href='#n8678'>8678</a> <a id='n8679' href='#n8679'>8679</a> <a id='n8680' href='#n8680'>8680</a> <a id='n8681' href='#n8681'>8681</a> <a id='n8682' href='#n8682'>8682</a> <a id='n8683' href='#n8683'>8683</a> <a id='n8684' href='#n8684'>8684</a> <a id='n8685' href='#n8685'>8685</a> <a id='n8686' href='#n8686'>8686</a> <a id='n8687' href='#n8687'>8687</a> <a id='n8688' href='#n8688'>8688</a> <a id='n8689' href='#n8689'>8689</a> <a id='n8690' href='#n8690'>8690</a> <a id='n8691' href='#n8691'>8691</a> <a id='n8692' href='#n8692'>8692</a> <a id='n8693' href='#n8693'>8693</a> <a id='n8694' href='#n8694'>8694</a> <a id='n8695' href='#n8695'>8695</a> <a id='n8696' href='#n8696'>8696</a> <a id='n8697' href='#n8697'>8697</a> <a id='n8698' href='#n8698'>8698</a> <a id='n8699' href='#n8699'>8699</a> <a id='n8700' href='#n8700'>8700</a> <a id='n8701' href='#n8701'>8701</a> <a id='n8702' href='#n8702'>8702</a> <a id='n8703' href='#n8703'>8703</a> <a id='n8704' href='#n8704'>8704</a> <a id='n8705' href='#n8705'>8705</a> <a id='n8706' href='#n8706'>8706</a> <a id='n8707' href='#n8707'>8707</a> <a id='n8708' href='#n8708'>8708</a> <a id='n8709' href='#n8709'>8709</a> <a id='n8710' href='#n8710'>8710</a> <a id='n8711' href='#n8711'>8711</a> <a id='n8712' href='#n8712'>8712</a> <a id='n8713' href='#n8713'>8713</a> <a id='n8714' href='#n8714'>8714</a> <a id='n8715' href='#n8715'>8715</a> <a id='n8716' href='#n8716'>8716</a> <a id='n8717' href='#n8717'>8717</a> <a id='n8718' href='#n8718'>8718</a> <a id='n8719' href='#n8719'>8719</a> <a id='n8720' href='#n8720'>8720</a> <a id='n8721' href='#n8721'>8721</a> <a id='n8722' href='#n8722'>8722</a> <a id='n8723' href='#n8723'>8723</a> <a id='n8724' href='#n8724'>8724</a> <a id='n8725' href='#n8725'>8725</a> <a id='n8726' href='#n8726'>8726</a> <a id='n8727' href='#n8727'>8727</a> <a id='n8728' href='#n8728'>8728</a> <a id='n8729' href='#n8729'>8729</a> <a id='n8730' href='#n8730'>8730</a> <a id='n8731' href='#n8731'>8731</a> <a id='n8732' href='#n8732'>8732</a> <a id='n8733' href='#n8733'>8733</a> <a id='n8734' href='#n8734'>8734</a> <a id='n8735' href='#n8735'>8735</a> <a id='n8736' href='#n8736'>8736</a> <a id='n8737' href='#n8737'>8737</a> <a id='n8738' href='#n8738'>8738</a> <a id='n8739' href='#n8739'>8739</a> <a id='n8740' href='#n8740'>8740</a> <a id='n8741' href='#n8741'>8741</a> <a id='n8742' href='#n8742'>8742</a> <a id='n8743' href='#n8743'>8743</a> <a id='n8744' href='#n8744'>8744</a> <a id='n8745' href='#n8745'>8745</a> <a id='n8746' href='#n8746'>8746</a> <a id='n8747' href='#n8747'>8747</a> <a id='n8748' href='#n8748'>8748</a> <a id='n8749' href='#n8749'>8749</a> <a id='n8750' href='#n8750'>8750</a> <a id='n8751' href='#n8751'>8751</a> <a id='n8752' href='#n8752'>8752</a> <a id='n8753' href='#n8753'>8753</a> <a id='n8754' href='#n8754'>8754</a> <a id='n8755' href='#n8755'>8755</a> <a id='n8756' href='#n8756'>8756</a> <a id='n8757' href='#n8757'>8757</a> <a id='n8758' href='#n8758'>8758</a> <a id='n8759' href='#n8759'>8759</a> <a id='n8760' href='#n8760'>8760</a> <a id='n8761' href='#n8761'>8761</a> <a id='n8762' href='#n8762'>8762</a> <a id='n8763' href='#n8763'>8763</a> <a id='n8764' href='#n8764'>8764</a> <a id='n8765' href='#n8765'>8765</a> <a id='n8766' href='#n8766'>8766</a> <a id='n8767' href='#n8767'>8767</a> <a id='n8768' href='#n8768'>8768</a> <a id='n8769' href='#n8769'>8769</a> <a id='n8770' href='#n8770'>8770</a> <a id='n8771' href='#n8771'>8771</a> <a id='n8772' href='#n8772'>8772</a> <a id='n8773' href='#n8773'>8773</a> <a id='n8774' href='#n8774'>8774</a> <a id='n8775' href='#n8775'>8775</a> <a id='n8776' href='#n8776'>8776</a> <a id='n8777' href='#n8777'>8777</a> <a id='n8778' href='#n8778'>8778</a> <a id='n8779' href='#n8779'>8779</a> <a id='n8780' href='#n8780'>8780</a> <a id='n8781' href='#n8781'>8781</a> <a id='n8782' href='#n8782'>8782</a> <a id='n8783' href='#n8783'>8783</a> <a id='n8784' href='#n8784'>8784</a> <a id='n8785' href='#n8785'>8785</a> <a id='n8786' href='#n8786'>8786</a> <a id='n8787' href='#n8787'>8787</a> <a id='n8788' href='#n8788'>8788</a> <a id='n8789' href='#n8789'>8789</a> <a id='n8790' href='#n8790'>8790</a> <a id='n8791' href='#n8791'>8791</a> <a id='n8792' href='#n8792'>8792</a> <a id='n8793' href='#n8793'>8793</a> <a id='n8794' href='#n8794'>8794</a> <a id='n8795' href='#n8795'>8795</a> <a id='n8796' href='#n8796'>8796</a> <a id='n8797' href='#n8797'>8797</a> <a id='n8798' href='#n8798'>8798</a> <a id='n8799' href='#n8799'>8799</a> <a id='n8800' href='#n8800'>8800</a> <a id='n8801' href='#n8801'>8801</a> <a id='n8802' href='#n8802'>8802</a> <a id='n8803' href='#n8803'>8803</a> <a id='n8804' href='#n8804'>8804</a> <a id='n8805' href='#n8805'>8805</a> <a id='n8806' href='#n8806'>8806</a> <a id='n8807' href='#n8807'>8807</a> <a id='n8808' href='#n8808'>8808</a> <a id='n8809' href='#n8809'>8809</a> <a id='n8810' href='#n8810'>8810</a> <a id='n8811' href='#n8811'>8811</a> <a id='n8812' href='#n8812'>8812</a> <a id='n8813' href='#n8813'>8813</a> <a id='n8814' href='#n8814'>8814</a> <a id='n8815' href='#n8815'>8815</a> <a id='n8816' href='#n8816'>8816</a> <a id='n8817' href='#n8817'>8817</a> <a id='n8818' href='#n8818'>8818</a> <a id='n8819' href='#n8819'>8819</a> <a id='n8820' href='#n8820'>8820</a> <a id='n8821' href='#n8821'>8821</a> <a id='n8822' href='#n8822'>8822</a> <a id='n8823' href='#n8823'>8823</a> <a id='n8824' href='#n8824'>8824</a> <a id='n8825' href='#n8825'>8825</a> <a id='n8826' href='#n8826'>8826</a> <a id='n8827' href='#n8827'>8827</a> <a id='n8828' href='#n8828'>8828</a> <a id='n8829' href='#n8829'>8829</a> <a id='n8830' href='#n8830'>8830</a> <a id='n8831' href='#n8831'>8831</a> <a id='n8832' href='#n8832'>8832</a> <a id='n8833' href='#n8833'>8833</a> <a id='n8834' href='#n8834'>8834</a> <a id='n8835' href='#n8835'>8835</a> <a id='n8836' href='#n8836'>8836</a> <a id='n8837' href='#n8837'>8837</a> <a id='n8838' href='#n8838'>8838</a> <a id='n8839' href='#n8839'>8839</a> <a id='n8840' href='#n8840'>8840</a> <a id='n8841' href='#n8841'>8841</a> <a id='n8842' href='#n8842'>8842</a> <a id='n8843' href='#n8843'>8843</a> <a id='n8844' href='#n8844'>8844</a> <a id='n8845' href='#n8845'>8845</a> <a id='n8846' href='#n8846'>8846</a> <a id='n8847' href='#n8847'>8847</a> <a id='n8848' href='#n8848'>8848</a> <a id='n8849' href='#n8849'>8849</a> <a id='n8850' href='#n8850'>8850</a> <a id='n8851' href='#n8851'>8851</a> <a id='n8852' href='#n8852'>8852</a> <a id='n8853' href='#n8853'>8853</a> <a id='n8854' href='#n8854'>8854</a> <a id='n8855' href='#n8855'>8855</a> <a id='n8856' href='#n8856'>8856</a> <a id='n8857' href='#n8857'>8857</a> <a id='n8858' href='#n8858'>8858</a> <a id='n8859' href='#n8859'>8859</a> <a id='n8860' href='#n8860'>8860</a> <a id='n8861' href='#n8861'>8861</a> <a id='n8862' href='#n8862'>8862</a> <a id='n8863' href='#n8863'>8863</a> <a id='n8864' href='#n8864'>8864</a> <a id='n8865' href='#n8865'>8865</a> <a id='n8866' href='#n8866'>8866</a> <a id='n8867' href='#n8867'>8867</a> <a id='n8868' href='#n8868'>8868</a> <a id='n8869' href='#n8869'>8869</a> <a id='n8870' href='#n8870'>8870</a> <a id='n8871' href='#n8871'>8871</a> <a id='n8872' href='#n8872'>8872</a> <a id='n8873' href='#n8873'>8873</a> <a id='n8874' href='#n8874'>8874</a> <a id='n8875' href='#n8875'>8875</a> <a id='n8876' href='#n8876'>8876</a> <a id='n8877' href='#n8877'>8877</a> <a id='n8878' href='#n8878'>8878</a> <a id='n8879' href='#n8879'>8879</a> <a id='n8880' href='#n8880'>8880</a> <a id='n8881' href='#n8881'>8881</a> <a id='n8882' href='#n8882'>8882</a> <a id='n8883' href='#n8883'>8883</a> <a id='n8884' href='#n8884'>8884</a> <a id='n8885' href='#n8885'>8885</a> <a id='n8886' href='#n8886'>8886</a> <a id='n8887' href='#n8887'>8887</a> <a id='n8888' href='#n8888'>8888</a> <a id='n8889' href='#n8889'>8889</a> <a id='n8890' href='#n8890'>8890</a> <a id='n8891' href='#n8891'>8891</a> <a id='n8892' href='#n8892'>8892</a> <a id='n8893' href='#n8893'>8893</a> <a id='n8894' href='#n8894'>8894</a> <a id='n8895' href='#n8895'>8895</a> <a id='n8896' href='#n8896'>8896</a> <a id='n8897' href='#n8897'>8897</a> <a id='n8898' href='#n8898'>8898</a> <a id='n8899' href='#n8899'>8899</a> <a id='n8900' href='#n8900'>8900</a> <a id='n8901' href='#n8901'>8901</a> <a id='n8902' href='#n8902'>8902</a> <a id='n8903' href='#n8903'>8903</a> <a id='n8904' href='#n8904'>8904</a> <a id='n8905' href='#n8905'>8905</a> <a id='n8906' href='#n8906'>8906</a> <a id='n8907' href='#n8907'>8907</a> <a id='n8908' href='#n8908'>8908</a> <a id='n8909' href='#n8909'>8909</a> <a id='n8910' href='#n8910'>8910</a> <a id='n8911' href='#n8911'>8911</a> <a id='n8912' href='#n8912'>8912</a> <a id='n8913' href='#n8913'>8913</a> <a id='n8914' href='#n8914'>8914</a> <a id='n8915' href='#n8915'>8915</a> <a id='n8916' href='#n8916'>8916</a> <a id='n8917' href='#n8917'>8917</a> <a id='n8918' href='#n8918'>8918</a> <a id='n8919' href='#n8919'>8919</a> <a id='n8920' href='#n8920'>8920</a> <a id='n8921' href='#n8921'>8921</a> <a id='n8922' href='#n8922'>8922</a> <a id='n8923' href='#n8923'>8923</a> <a id='n8924' href='#n8924'>8924</a> <a id='n8925' href='#n8925'>8925</a> <a id='n8926' href='#n8926'>8926</a> <a id='n8927' href='#n8927'>8927</a> <a id='n8928' href='#n8928'>8928</a> <a id='n8929' href='#n8929'>8929</a> <a id='n8930' href='#n8930'>8930</a> <a id='n8931' href='#n8931'>8931</a> <a id='n8932' href='#n8932'>8932</a> <a id='n8933' href='#n8933'>8933</a> <a id='n8934' href='#n8934'>8934</a> <a id='n8935' href='#n8935'>8935</a> <a id='n8936' href='#n8936'>8936</a> <a id='n8937' href='#n8937'>8937</a> <a id='n8938' href='#n8938'>8938</a> <a id='n8939' href='#n8939'>8939</a> <a id='n8940' href='#n8940'>8940</a> <a id='n8941' href='#n8941'>8941</a> <a id='n8942' href='#n8942'>8942</a> <a id='n8943' href='#n8943'>8943</a> <a id='n8944' href='#n8944'>8944</a> <a id='n8945' href='#n8945'>8945</a> <a id='n8946' href='#n8946'>8946</a> <a id='n8947' href='#n8947'>8947</a> <a id='n8948' href='#n8948'>8948</a> <a id='n8949' href='#n8949'>8949</a> <a id='n8950' href='#n8950'>8950</a> <a id='n8951' href='#n8951'>8951</a> <a id='n8952' href='#n8952'>8952</a> <a id='n8953' href='#n8953'>8953</a> <a id='n8954' href='#n8954'>8954</a> <a id='n8955' href='#n8955'>8955</a> <a id='n8956' href='#n8956'>8956</a> <a id='n8957' href='#n8957'>8957</a> <a id='n8958' href='#n8958'>8958</a> <a id='n8959' href='#n8959'>8959</a> <a id='n8960' href='#n8960'>8960</a> <a id='n8961' href='#n8961'>8961</a> <a id='n8962' href='#n8962'>8962</a> <a id='n8963' href='#n8963'>8963</a> <a id='n8964' href='#n8964'>8964</a> <a id='n8965' href='#n8965'>8965</a> <a id='n8966' href='#n8966'>8966</a> <a id='n8967' href='#n8967'>8967</a> <a id='n8968' href='#n8968'>8968</a> <a id='n8969' href='#n8969'>8969</a> <a id='n8970' href='#n8970'>8970</a> <a id='n8971' href='#n8971'>8971</a> <a id='n8972' href='#n8972'>8972</a> <a id='n8973' href='#n8973'>8973</a> <a id='n8974' href='#n8974'>8974</a> <a id='n8975' href='#n8975'>8975</a> <a id='n8976' href='#n8976'>8976</a> <a id='n8977' href='#n8977'>8977</a> <a id='n8978' href='#n8978'>8978</a> <a id='n8979' href='#n8979'>8979</a> <a id='n8980' href='#n8980'>8980</a> <a id='n8981' href='#n8981'>8981</a> <a id='n8982' href='#n8982'>8982</a> <a id='n8983' href='#n8983'>8983</a> <a id='n8984' href='#n8984'>8984</a> <a id='n8985' href='#n8985'>8985</a> <a id='n8986' href='#n8986'>8986</a> <a id='n8987' href='#n8987'>8987</a> <a id='n8988' href='#n8988'>8988</a> <a id='n8989' href='#n8989'>8989</a> <a id='n8990' href='#n8990'>8990</a> <a id='n8991' href='#n8991'>8991</a> <a id='n8992' href='#n8992'>8992</a> <a id='n8993' href='#n8993'>8993</a> <a id='n8994' href='#n8994'>8994</a> <a id='n8995' href='#n8995'>8995</a> <a id='n8996' href='#n8996'>8996</a> <a id='n8997' href='#n8997'>8997</a> <a id='n8998' href='#n8998'>8998</a> <a id='n8999' href='#n8999'>8999</a> <a id='n9000' href='#n9000'>9000</a> <a id='n9001' href='#n9001'>9001</a> <a id='n9002' href='#n9002'>9002</a> <a id='n9003' href='#n9003'>9003</a> <a id='n9004' href='#n9004'>9004</a> <a id='n9005' href='#n9005'>9005</a> <a id='n9006' href='#n9006'>9006</a> <a id='n9007' href='#n9007'>9007</a> <a id='n9008' href='#n9008'>9008</a> <a id='n9009' href='#n9009'>9009</a> <a id='n9010' href='#n9010'>9010</a> <a id='n9011' href='#n9011'>9011</a> <a id='n9012' href='#n9012'>9012</a> <a id='n9013' href='#n9013'>9013</a> <a id='n9014' href='#n9014'>9014</a> <a id='n9015' href='#n9015'>9015</a> <a id='n9016' href='#n9016'>9016</a> <a id='n9017' href='#n9017'>9017</a> <a id='n9018' href='#n9018'>9018</a> <a id='n9019' href='#n9019'>9019</a> <a id='n9020' href='#n9020'>9020</a> <a id='n9021' href='#n9021'>9021</a> <a id='n9022' href='#n9022'>9022</a> <a id='n9023' href='#n9023'>9023</a> <a id='n9024' href='#n9024'>9024</a> <a id='n9025' href='#n9025'>9025</a> <a id='n9026' href='#n9026'>9026</a> <a id='n9027' href='#n9027'>9027</a> <a id='n9028' href='#n9028'>9028</a> <a id='n9029' href='#n9029'>9029</a> <a id='n9030' href='#n9030'>9030</a> <a id='n9031' href='#n9031'>9031</a> <a id='n9032' href='#n9032'>9032</a> <a id='n9033' href='#n9033'>9033</a> <a id='n9034' href='#n9034'>9034</a> <a id='n9035' href='#n9035'>9035</a> <a id='n9036' href='#n9036'>9036</a> <a id='n9037' href='#n9037'>9037</a> <a id='n9038' href='#n9038'>9038</a> <a id='n9039' href='#n9039'>9039</a> <a id='n9040' href='#n9040'>9040</a> <a id='n9041' href='#n9041'>9041</a> <a id='n9042' href='#n9042'>9042</a> <a id='n9043' href='#n9043'>9043</a> <a id='n9044' href='#n9044'>9044</a> <a id='n9045' href='#n9045'>9045</a> <a id='n9046' href='#n9046'>9046</a> <a id='n9047' href='#n9047'>9047</a> <a id='n9048' href='#n9048'>9048</a> <a id='n9049' href='#n9049'>9049</a> <a id='n9050' href='#n9050'>9050</a> <a id='n9051' href='#n9051'>9051</a> <a id='n9052' href='#n9052'>9052</a> <a id='n9053' href='#n9053'>9053</a> <a id='n9054' href='#n9054'>9054</a> <a id='n9055' href='#n9055'>9055</a> <a id='n9056' href='#n9056'>9056</a> <a id='n9057' href='#n9057'>9057</a> <a id='n9058' href='#n9058'>9058</a> <a id='n9059' href='#n9059'>9059</a> <a id='n9060' href='#n9060'>9060</a> <a id='n9061' href='#n9061'>9061</a> <a id='n9062' href='#n9062'>9062</a> <a id='n9063' href='#n9063'>9063</a> <a id='n9064' href='#n9064'>9064</a> <a id='n9065' href='#n9065'>9065</a> <a id='n9066' href='#n9066'>9066</a> <a id='n9067' href='#n9067'>9067</a> <a id='n9068' href='#n9068'>9068</a> <a id='n9069' href='#n9069'>9069</a> <a id='n9070' href='#n9070'>9070</a> <a id='n9071' href='#n9071'>9071</a> <a id='n9072' href='#n9072'>9072</a> <a id='n9073' href='#n9073'>9073</a> <a id='n9074' href='#n9074'>9074</a> <a id='n9075' href='#n9075'>9075</a> <a id='n9076' href='#n9076'>9076</a> <a id='n9077' href='#n9077'>9077</a> <a id='n9078' href='#n9078'>9078</a> <a id='n9079' href='#n9079'>9079</a> <a id='n9080' href='#n9080'>9080</a> <a id='n9081' href='#n9081'>9081</a> <a id='n9082' href='#n9082'>9082</a> <a id='n9083' href='#n9083'>9083</a> <a id='n9084' href='#n9084'>9084</a> <a id='n9085' href='#n9085'>9085</a> <a id='n9086' href='#n9086'>9086</a> <a id='n9087' href='#n9087'>9087</a> <a id='n9088' href='#n9088'>9088</a> <a id='n9089' href='#n9089'>9089</a> <a id='n9090' href='#n9090'>9090</a> <a id='n9091' href='#n9091'>9091</a> <a id='n9092' href='#n9092'>9092</a> <a id='n9093' href='#n9093'>9093</a> <a id='n9094' href='#n9094'>9094</a> <a id='n9095' href='#n9095'>9095</a> <a id='n9096' href='#n9096'>9096</a> <a id='n9097' href='#n9097'>9097</a> <a id='n9098' href='#n9098'>9098</a> <a id='n9099' href='#n9099'>9099</a> <a id='n9100' href='#n9100'>9100</a> <a id='n9101' href='#n9101'>9101</a> <a id='n9102' href='#n9102'>9102</a> <a id='n9103' href='#n9103'>9103</a> <a id='n9104' href='#n9104'>9104</a> <a id='n9105' href='#n9105'>9105</a> <a id='n9106' href='#n9106'>9106</a> <a id='n9107' href='#n9107'>9107</a> <a id='n9108' href='#n9108'>9108</a> <a id='n9109' href='#n9109'>9109</a> <a id='n9110' href='#n9110'>9110</a> <a id='n9111' href='#n9111'>9111</a> <a id='n9112' href='#n9112'>9112</a> <a id='n9113' href='#n9113'>9113</a> <a id='n9114' href='#n9114'>9114</a> <a id='n9115' href='#n9115'>9115</a> <a id='n9116' href='#n9116'>9116</a> <a id='n9117' href='#n9117'>9117</a> <a id='n9118' href='#n9118'>9118</a> <a id='n9119' href='#n9119'>9119</a> <a id='n9120' href='#n9120'>9120</a> <a id='n9121' href='#n9121'>9121</a> <a id='n9122' href='#n9122'>9122</a> <a id='n9123' href='#n9123'>9123</a> <a id='n9124' href='#n9124'>9124</a> <a id='n9125' href='#n9125'>9125</a> <a id='n9126' href='#n9126'>9126</a> <a id='n9127' href='#n9127'>9127</a> <a id='n9128' href='#n9128'>9128</a> <a id='n9129' href='#n9129'>9129</a> <a id='n9130' href='#n9130'>9130</a> <a id='n9131' href='#n9131'>9131</a> <a id='n9132' href='#n9132'>9132</a> <a id='n9133' href='#n9133'>9133</a> <a id='n9134' href='#n9134'>9134</a> <a id='n9135' href='#n9135'>9135</a> <a id='n9136' href='#n9136'>9136</a> <a id='n9137' href='#n9137'>9137</a> <a id='n9138' href='#n9138'>9138</a> <a id='n9139' href='#n9139'>9139</a> <a id='n9140' href='#n9140'>9140</a> <a id='n9141' href='#n9141'>9141</a> <a id='n9142' href='#n9142'>9142</a> <a id='n9143' href='#n9143'>9143</a> <a id='n9144' href='#n9144'>9144</a> <a id='n9145' href='#n9145'>9145</a> <a id='n9146' href='#n9146'>9146</a> <a id='n9147' href='#n9147'>9147</a> <a id='n9148' href='#n9148'>9148</a> <a id='n9149' href='#n9149'>9149</a> <a id='n9150' href='#n9150'>9150</a> <a id='n9151' href='#n9151'>9151</a> <a id='n9152' href='#n9152'>9152</a> <a id='n9153' href='#n9153'>9153</a> <a id='n9154' href='#n9154'>9154</a> <a id='n9155' href='#n9155'>9155</a> <a id='n9156' href='#n9156'>9156</a> <a id='n9157' href='#n9157'>9157</a> <a id='n9158' href='#n9158'>9158</a> <a id='n9159' href='#n9159'>9159</a> <a id='n9160' href='#n9160'>9160</a> <a id='n9161' href='#n9161'>9161</a> <a id='n9162' href='#n9162'>9162</a> <a id='n9163' href='#n9163'>9163</a> <a id='n9164' href='#n9164'>9164</a> <a id='n9165' href='#n9165'>9165</a> <a id='n9166' href='#n9166'>9166</a> <a id='n9167' href='#n9167'>9167</a> <a id='n9168' href='#n9168'>9168</a> <a id='n9169' href='#n9169'>9169</a> <a id='n9170' href='#n9170'>9170</a> <a id='n9171' href='#n9171'>9171</a> <a id='n9172' href='#n9172'>9172</a> <a id='n9173' href='#n9173'>9173</a> <a id='n9174' href='#n9174'>9174</a> <a id='n9175' href='#n9175'>9175</a> <a id='n9176' href='#n9176'>9176</a> <a id='n9177' href='#n9177'>9177</a> <a id='n9178' href='#n9178'>9178</a> <a id='n9179' href='#n9179'>9179</a> <a id='n9180' href='#n9180'>9180</a> <a id='n9181' href='#n9181'>9181</a> <a id='n9182' href='#n9182'>9182</a> <a id='n9183' href='#n9183'>9183</a> <a id='n9184' href='#n9184'>9184</a> <a id='n9185' href='#n9185'>9185</a> <a id='n9186' href='#n9186'>9186</a> <a id='n9187' href='#n9187'>9187</a> <a id='n9188' href='#n9188'>9188</a> <a id='n9189' href='#n9189'>9189</a> <a id='n9190' href='#n9190'>9190</a> <a id='n9191' href='#n9191'>9191</a> <a id='n9192' href='#n9192'>9192</a> <a id='n9193' href='#n9193'>9193</a> <a id='n9194' href='#n9194'>9194</a> <a id='n9195' href='#n9195'>9195</a> <a id='n9196' href='#n9196'>9196</a> <a id='n9197' href='#n9197'>9197</a> <a id='n9198' href='#n9198'>9198</a> <a id='n9199' href='#n9199'>9199</a> <a id='n9200' href='#n9200'>9200</a> <a id='n9201' href='#n9201'>9201</a> <a id='n9202' href='#n9202'>9202</a> <a id='n9203' href='#n9203'>9203</a> <a id='n9204' href='#n9204'>9204</a> <a id='n9205' href='#n9205'>9205</a> <a id='n9206' href='#n9206'>9206</a> <a id='n9207' href='#n9207'>9207</a> <a id='n9208' href='#n9208'>9208</a> <a id='n9209' href='#n9209'>9209</a> <a id='n9210' href='#n9210'>9210</a> <a id='n9211' href='#n9211'>9211</a> <a id='n9212' href='#n9212'>9212</a> <a id='n9213' href='#n9213'>9213</a> <a id='n9214' href='#n9214'>9214</a> <a id='n9215' href='#n9215'>9215</a> <a id='n9216' href='#n9216'>9216</a> <a id='n9217' href='#n9217'>9217</a> <a id='n9218' href='#n9218'>9218</a> <a id='n9219' href='#n9219'>9219</a> <a id='n9220' href='#n9220'>9220</a> <a id='n9221' href='#n9221'>9221</a> <a id='n9222' href='#n9222'>9222</a> <a id='n9223' href='#n9223'>9223</a> <a id='n9224' href='#n9224'>9224</a> <a id='n9225' href='#n9225'>9225</a> <a id='n9226' href='#n9226'>9226</a> <a id='n9227' href='#n9227'>9227</a> <a id='n9228' href='#n9228'>9228</a> <a id='n9229' href='#n9229'>9229</a> <a id='n9230' href='#n9230'>9230</a> <a id='n9231' href='#n9231'>9231</a> <a id='n9232' href='#n9232'>9232</a> <a id='n9233' href='#n9233'>9233</a> <a id='n9234' href='#n9234'>9234</a> <a id='n9235' href='#n9235'>9235</a> <a id='n9236' href='#n9236'>9236</a> <a id='n9237' href='#n9237'>9237</a> <a id='n9238' href='#n9238'>9238</a> <a id='n9239' href='#n9239'>9239</a> <a id='n9240' href='#n9240'>9240</a> <a id='n9241' href='#n9241'>9241</a> <a id='n9242' href='#n9242'>9242</a> <a id='n9243' href='#n9243'>9243</a> <a id='n9244' href='#n9244'>9244</a> <a id='n9245' href='#n9245'>9245</a> <a id='n9246' href='#n9246'>9246</a> <a id='n9247' href='#n9247'>9247</a> <a id='n9248' href='#n9248'>9248</a> <a id='n9249' href='#n9249'>9249</a> <a id='n9250' href='#n9250'>9250</a> <a id='n9251' href='#n9251'>9251</a> <a id='n9252' href='#n9252'>9252</a> <a id='n9253' href='#n9253'>9253</a> <a id='n9254' href='#n9254'>9254</a> <a id='n9255' href='#n9255'>9255</a> <a id='n9256' href='#n9256'>9256</a> <a id='n9257' href='#n9257'>9257</a> <a id='n9258' href='#n9258'>9258</a> <a id='n9259' href='#n9259'>9259</a> <a id='n9260' href='#n9260'>9260</a> <a id='n9261' href='#n9261'>9261</a> <a id='n9262' href='#n9262'>9262</a> <a id='n9263' href='#n9263'>9263</a> <a id='n9264' href='#n9264'>9264</a> <a id='n9265' href='#n9265'>9265</a> <a id='n9266' href='#n9266'>9266</a> <a id='n9267' href='#n9267'>9267</a> <a id='n9268' href='#n9268'>9268</a> <a id='n9269' href='#n9269'>9269</a> <a id='n9270' href='#n9270'>9270</a> <a id='n9271' href='#n9271'>9271</a> <a id='n9272' href='#n9272'>9272</a> <a id='n9273' href='#n9273'>9273</a> <a id='n9274' href='#n9274'>9274</a> <a id='n9275' href='#n9275'>9275</a> <a id='n9276' href='#n9276'>9276</a> <a id='n9277' href='#n9277'>9277</a> <a id='n9278' href='#n9278'>9278</a> <a id='n9279' href='#n9279'>9279</a> <a id='n9280' href='#n9280'>9280</a> <a id='n9281' href='#n9281'>9281</a> <a id='n9282' href='#n9282'>9282</a> <a id='n9283' href='#n9283'>9283</a> <a id='n9284' href='#n9284'>9284</a> <a id='n9285' href='#n9285'>9285</a> <a id='n9286' href='#n9286'>9286</a> <a id='n9287' href='#n9287'>9287</a> <a id='n9288' href='#n9288'>9288</a> <a id='n9289' href='#n9289'>9289</a> <a id='n9290' href='#n9290'>9290</a> <a id='n9291' href='#n9291'>9291</a> <a id='n9292' href='#n9292'>9292</a> <a id='n9293' href='#n9293'>9293</a> <a id='n9294' href='#n9294'>9294</a> <a id='n9295' href='#n9295'>9295</a> <a id='n9296' href='#n9296'>9296</a> <a id='n9297' href='#n9297'>9297</a> <a id='n9298' href='#n9298'>9298</a> <a id='n9299' href='#n9299'>9299</a> <a id='n9300' href='#n9300'>9300</a> <a id='n9301' href='#n9301'>9301</a> <a id='n9302' href='#n9302'>9302</a> <a id='n9303' href='#n9303'>9303</a> <a id='n9304' href='#n9304'>9304</a> <a id='n9305' href='#n9305'>9305</a> <a id='n9306' href='#n9306'>9306</a> <a id='n9307' href='#n9307'>9307</a> <a id='n9308' href='#n9308'>9308</a> <a id='n9309' href='#n9309'>9309</a> <a id='n9310' href='#n9310'>9310</a> <a id='n9311' href='#n9311'>9311</a> <a id='n9312' href='#n9312'>9312</a> <a id='n9313' href='#n9313'>9313</a> <a id='n9314' href='#n9314'>9314</a> <a id='n9315' href='#n9315'>9315</a> <a id='n9316' href='#n9316'>9316</a> <a id='n9317' href='#n9317'>9317</a> <a id='n9318' href='#n9318'>9318</a> <a id='n9319' href='#n9319'>9319</a> <a id='n9320' href='#n9320'>9320</a> <a id='n9321' href='#n9321'>9321</a> <a id='n9322' href='#n9322'>9322</a> <a id='n9323' href='#n9323'>9323</a> <a id='n9324' href='#n9324'>9324</a> <a id='n9325' href='#n9325'>9325</a> <a id='n9326' href='#n9326'>9326</a> <a id='n9327' href='#n9327'>9327</a> <a id='n9328' href='#n9328'>9328</a> <a id='n9329' href='#n9329'>9329</a> <a id='n9330' href='#n9330'>9330</a> <a id='n9331' href='#n9331'>9331</a> <a id='n9332' href='#n9332'>9332</a> <a id='n9333' href='#n9333'>9333</a> <a id='n9334' href='#n9334'>9334</a> <a id='n9335' href='#n9335'>9335</a> <a id='n9336' href='#n9336'>9336</a> <a id='n9337' href='#n9337'>9337</a> <a id='n9338' href='#n9338'>9338</a> <a id='n9339' href='#n9339'>9339</a> <a id='n9340' href='#n9340'>9340</a> <a id='n9341' href='#n9341'>9341</a> <a id='n9342' href='#n9342'>9342</a> <a id='n9343' href='#n9343'>9343</a> <a id='n9344' href='#n9344'>9344</a> <a id='n9345' href='#n9345'>9345</a> <a id='n9346' href='#n9346'>9346</a> <a id='n9347' href='#n9347'>9347</a> <a id='n9348' href='#n9348'>9348</a> <a id='n9349' href='#n9349'>9349</a> <a id='n9350' href='#n9350'>9350</a> <a id='n9351' href='#n9351'>9351</a> <a id='n9352' href='#n9352'>9352</a> <a id='n9353' href='#n9353'>9353</a> <a id='n9354' href='#n9354'>9354</a> <a id='n9355' href='#n9355'>9355</a> <a id='n9356' href='#n9356'>9356</a> <a id='n9357' href='#n9357'>9357</a> <a id='n9358' href='#n9358'>9358</a> <a id='n9359' href='#n9359'>9359</a> <a id='n9360' href='#n9360'>9360</a> <a id='n9361' href='#n9361'>9361</a> <a id='n9362' href='#n9362'>9362</a> <a id='n9363' href='#n9363'>9363</a> <a id='n9364' href='#n9364'>9364</a> <a id='n9365' href='#n9365'>9365</a> <a id='n9366' href='#n9366'>9366</a> <a id='n9367' href='#n9367'>9367</a> <a id='n9368' href='#n9368'>9368</a> <a id='n9369' href='#n9369'>9369</a> <a id='n9370' href='#n9370'>9370</a> <a id='n9371' href='#n9371'>9371</a> <a id='n9372' href='#n9372'>9372</a> <a id='n9373' href='#n9373'>9373</a> <a id='n9374' href='#n9374'>9374</a> <a id='n9375' href='#n9375'>9375</a> <a id='n9376' href='#n9376'>9376</a> <a id='n9377' href='#n9377'>9377</a> <a id='n9378' href='#n9378'>9378</a> <a id='n9379' href='#n9379'>9379</a> <a id='n9380' href='#n9380'>9380</a> <a id='n9381' href='#n9381'>9381</a> <a id='n9382' href='#n9382'>9382</a> <a id='n9383' href='#n9383'>9383</a> <a id='n9384' href='#n9384'>9384</a> <a id='n9385' href='#n9385'>9385</a> <a id='n9386' href='#n9386'>9386</a> <a id='n9387' href='#n9387'>9387</a> <a id='n9388' href='#n9388'>9388</a> <a id='n9389' href='#n9389'>9389</a> <a id='n9390' href='#n9390'>9390</a> <a id='n9391' href='#n9391'>9391</a> <a id='n9392' href='#n9392'>9392</a> <a id='n9393' href='#n9393'>9393</a> <a id='n9394' href='#n9394'>9394</a> <a id='n9395' href='#n9395'>9395</a> <a id='n9396' href='#n9396'>9396</a> <a id='n9397' href='#n9397'>9397</a> <a id='n9398' href='#n9398'>9398</a> <a id='n9399' href='#n9399'>9399</a> <a id='n9400' href='#n9400'>9400</a> <a id='n9401' href='#n9401'>9401</a> <a id='n9402' href='#n9402'>9402</a> <a id='n9403' href='#n9403'>9403</a> <a id='n9404' href='#n9404'>9404</a> <a id='n9405' href='#n9405'>9405</a> <a id='n9406' href='#n9406'>9406</a> <a id='n9407' href='#n9407'>9407</a> <a id='n9408' href='#n9408'>9408</a> <a id='n9409' href='#n9409'>9409</a> <a id='n9410' href='#n9410'>9410</a> <a id='n9411' href='#n9411'>9411</a> <a id='n9412' href='#n9412'>9412</a> <a id='n9413' href='#n9413'>9413</a> <a id='n9414' href='#n9414'>9414</a> <a id='n9415' href='#n9415'>9415</a> <a id='n9416' href='#n9416'>9416</a> <a id='n9417' href='#n9417'>9417</a> <a id='n9418' href='#n9418'>9418</a> <a id='n9419' href='#n9419'>9419</a> <a id='n9420' href='#n9420'>9420</a> <a id='n9421' href='#n9421'>9421</a> <a id='n9422' href='#n9422'>9422</a> <a id='n9423' href='#n9423'>9423</a> <a id='n9424' href='#n9424'>9424</a> <a id='n9425' href='#n9425'>9425</a> <a id='n9426' href='#n9426'>9426</a> <a id='n9427' href='#n9427'>9427</a> <a id='n9428' href='#n9428'>9428</a> <a id='n9429' href='#n9429'>9429</a> <a id='n9430' href='#n9430'>9430</a> <a id='n9431' href='#n9431'>9431</a> <a id='n9432' href='#n9432'>9432</a> <a id='n9433' href='#n9433'>9433</a> <a id='n9434' href='#n9434'>9434</a> <a id='n9435' href='#n9435'>9435</a> <a id='n9436' href='#n9436'>9436</a> <a id='n9437' href='#n9437'>9437</a> <a id='n9438' href='#n9438'>9438</a> <a id='n9439' href='#n9439'>9439</a> <a id='n9440' href='#n9440'>9440</a> <a id='n9441' href='#n9441'>9441</a> <a id='n9442' href='#n9442'>9442</a> <a id='n9443' href='#n9443'>9443</a> <a id='n9444' href='#n9444'>9444</a> <a id='n9445' href='#n9445'>9445</a> <a id='n9446' href='#n9446'>9446</a> <a id='n9447' href='#n9447'>9447</a> <a id='n9448' href='#n9448'>9448</a> <a id='n9449' href='#n9449'>9449</a> <a id='n9450' href='#n9450'>9450</a> <a id='n9451' href='#n9451'>9451</a> <a id='n9452' href='#n9452'>9452</a> <a id='n9453' href='#n9453'>9453</a> <a id='n9454' href='#n9454'>9454</a> <a id='n9455' href='#n9455'>9455</a> <a id='n9456' href='#n9456'>9456</a> <a id='n9457' href='#n9457'>9457</a> <a id='n9458' href='#n9458'>9458</a> <a id='n9459' href='#n9459'>9459</a> <a id='n9460' href='#n9460'>9460</a> <a id='n9461' href='#n9461'>9461</a> <a id='n9462' href='#n9462'>9462</a> <a id='n9463' href='#n9463'>9463</a> <a id='n9464' href='#n9464'>9464</a> <a id='n9465' href='#n9465'>9465</a> <a id='n9466' href='#n9466'>9466</a> <a id='n9467' href='#n9467'>9467</a> <a id='n9468' href='#n9468'>9468</a> <a id='n9469' href='#n9469'>9469</a> <a id='n9470' href='#n9470'>9470</a> <a id='n9471' href='#n9471'>9471</a> <a id='n9472' href='#n9472'>9472</a> <a id='n9473' href='#n9473'>9473</a> <a id='n9474' href='#n9474'>9474</a> <a id='n9475' href='#n9475'>9475</a> <a id='n9476' href='#n9476'>9476</a> <a id='n9477' href='#n9477'>9477</a> <a id='n9478' href='#n9478'>9478</a> <a id='n9479' href='#n9479'>9479</a> <a id='n9480' href='#n9480'>9480</a> <a id='n9481' href='#n9481'>9481</a> <a id='n9482' href='#n9482'>9482</a> <a id='n9483' href='#n9483'>9483</a> <a id='n9484' href='#n9484'>9484</a> <a id='n9485' href='#n9485'>9485</a> <a id='n9486' href='#n9486'>9486</a> <a id='n9487' href='#n9487'>9487</a> <a id='n9488' href='#n9488'>9488</a> <a id='n9489' href='#n9489'>9489</a> <a id='n9490' href='#n9490'>9490</a> <a id='n9491' href='#n9491'>9491</a> <a id='n9492' href='#n9492'>9492</a> <a id='n9493' href='#n9493'>9493</a> <a id='n9494' href='#n9494'>9494</a> <a id='n9495' href='#n9495'>9495</a> <a id='n9496' href='#n9496'>9496</a> <a id='n9497' href='#n9497'>9497</a> <a id='n9498' href='#n9498'>9498</a> <a id='n9499' href='#n9499'>9499</a> <a id='n9500' href='#n9500'>9500</a> <a id='n9501' href='#n9501'>9501</a> <a id='n9502' href='#n9502'>9502</a> <a id='n9503' href='#n9503'>9503</a> <a id='n9504' href='#n9504'>9504</a> <a id='n9505' href='#n9505'>9505</a> <a id='n9506' href='#n9506'>9506</a> <a id='n9507' href='#n9507'>9507</a> <a id='n9508' href='#n9508'>9508</a> <a id='n9509' href='#n9509'>9509</a> <a id='n9510' href='#n9510'>9510</a> <a id='n9511' href='#n9511'>9511</a> <a id='n9512' href='#n9512'>9512</a> <a id='n9513' href='#n9513'>9513</a> <a id='n9514' href='#n9514'>9514</a> <a id='n9515' href='#n9515'>9515</a> <a id='n9516' href='#n9516'>9516</a> <a id='n9517' href='#n9517'>9517</a> <a id='n9518' href='#n9518'>9518</a> <a id='n9519' href='#n9519'>9519</a> <a id='n9520' href='#n9520'>9520</a> <a id='n9521' href='#n9521'>9521</a> <a id='n9522' href='#n9522'>9522</a> <a id='n9523' href='#n9523'>9523</a> <a id='n9524' href='#n9524'>9524</a> <a id='n9525' href='#n9525'>9525</a> <a id='n9526' href='#n9526'>9526</a> <a id='n9527' href='#n9527'>9527</a> <a id='n9528' href='#n9528'>9528</a> <a id='n9529' href='#n9529'>9529</a> <a id='n9530' href='#n9530'>9530</a> <a id='n9531' href='#n9531'>9531</a> <a id='n9532' href='#n9532'>9532</a> <a id='n9533' href='#n9533'>9533</a> <a id='n9534' href='#n9534'>9534</a> <a id='n9535' href='#n9535'>9535</a> <a id='n9536' href='#n9536'>9536</a> <a id='n9537' href='#n9537'>9537</a> <a id='n9538' href='#n9538'>9538</a> <a id='n9539' href='#n9539'>9539</a> <a id='n9540' href='#n9540'>9540</a> <a id='n9541' href='#n9541'>9541</a> <a id='n9542' href='#n9542'>9542</a> <a id='n9543' href='#n9543'>9543</a> <a id='n9544' href='#n9544'>9544</a> <a id='n9545' href='#n9545'>9545</a> <a id='n9546' href='#n9546'>9546</a> <a id='n9547' href='#n9547'>9547</a> <a id='n9548' href='#n9548'>9548</a> <a id='n9549' href='#n9549'>9549</a> <a id='n9550' href='#n9550'>9550</a> <a id='n9551' href='#n9551'>9551</a> <a id='n9552' href='#n9552'>9552</a> <a id='n9553' href='#n9553'>9553</a> <a id='n9554' href='#n9554'>9554</a> <a id='n9555' href='#n9555'>9555</a> <a id='n9556' href='#n9556'>9556</a> <a id='n9557' href='#n9557'>9557</a> <a id='n9558' href='#n9558'>9558</a> <a id='n9559' href='#n9559'>9559</a> <a id='n9560' href='#n9560'>9560</a> <a id='n9561' href='#n9561'>9561</a> <a id='n9562' href='#n9562'>9562</a> <a id='n9563' href='#n9563'>9563</a> <a id='n9564' href='#n9564'>9564</a> <a id='n9565' href='#n9565'>9565</a> <a id='n9566' href='#n9566'>9566</a> <a id='n9567' href='#n9567'>9567</a> <a id='n9568' href='#n9568'>9568</a> <a id='n9569' href='#n9569'>9569</a> <a id='n9570' href='#n9570'>9570</a> <a id='n9571' href='#n9571'>9571</a> <a id='n9572' href='#n9572'>9572</a> <a id='n9573' href='#n9573'>9573</a> <a id='n9574' href='#n9574'>9574</a> <a id='n9575' href='#n9575'>9575</a> <a id='n9576' href='#n9576'>9576</a> <a id='n9577' href='#n9577'>9577</a> <a id='n9578' href='#n9578'>9578</a> <a id='n9579' href='#n9579'>9579</a> <a id='n9580' href='#n9580'>9580</a> <a id='n9581' href='#n9581'>9581</a> <a id='n9582' href='#n9582'>9582</a> <a id='n9583' href='#n9583'>9583</a> <a id='n9584' href='#n9584'>9584</a> <a id='n9585' href='#n9585'>9585</a> <a id='n9586' href='#n9586'>9586</a> <a id='n9587' href='#n9587'>9587</a> <a id='n9588' href='#n9588'>9588</a> <a id='n9589' href='#n9589'>9589</a> <a id='n9590' href='#n9590'>9590</a> <a id='n9591' href='#n9591'>9591</a> <a id='n9592' href='#n9592'>9592</a> <a id='n9593' href='#n9593'>9593</a> <a id='n9594' href='#n9594'>9594</a> <a id='n9595' href='#n9595'>9595</a> <a id='n9596' href='#n9596'>9596</a> <a id='n9597' href='#n9597'>9597</a> <a id='n9598' href='#n9598'>9598</a> <a id='n9599' href='#n9599'>9599</a> <a id='n9600' href='#n9600'>9600</a> <a id='n9601' href='#n9601'>9601</a> <a id='n9602' href='#n9602'>9602</a> <a id='n9603' href='#n9603'>9603</a> <a id='n9604' href='#n9604'>9604</a> <a id='n9605' href='#n9605'>9605</a> <a id='n9606' href='#n9606'>9606</a> <a id='n9607' href='#n9607'>9607</a> <a id='n9608' href='#n9608'>9608</a> <a id='n9609' href='#n9609'>9609</a> <a id='n9610' href='#n9610'>9610</a> <a id='n9611' href='#n9611'>9611</a> <a id='n9612' href='#n9612'>9612</a> <a id='n9613' href='#n9613'>9613</a> <a id='n9614' href='#n9614'>9614</a> <a id='n9615' href='#n9615'>9615</a> <a id='n9616' href='#n9616'>9616</a> <a id='n9617' href='#n9617'>9617</a> <a id='n9618' href='#n9618'>9618</a> <a id='n9619' href='#n9619'>9619</a> <a id='n9620' href='#n9620'>9620</a> <a id='n9621' href='#n9621'>9621</a> <a id='n9622' href='#n9622'>9622</a> <a id='n9623' href='#n9623'>9623</a> <a id='n9624' href='#n9624'>9624</a> <a id='n9625' href='#n9625'>9625</a> <a id='n9626' href='#n9626'>9626</a> <a id='n9627' href='#n9627'>9627</a> <a id='n9628' href='#n9628'>9628</a> <a id='n9629' href='#n9629'>9629</a> <a id='n9630' href='#n9630'>9630</a> <a id='n9631' href='#n9631'>9631</a> <a id='n9632' href='#n9632'>9632</a> <a id='n9633' href='#n9633'>9633</a> <a id='n9634' href='#n9634'>9634</a> <a id='n9635' href='#n9635'>9635</a> <a id='n9636' href='#n9636'>9636</a> <a id='n9637' href='#n9637'>9637</a> <a id='n9638' href='#n9638'>9638</a> <a id='n9639' href='#n9639'>9639</a> <a id='n9640' href='#n9640'>9640</a> <a id='n9641' href='#n9641'>9641</a> <a id='n9642' href='#n9642'>9642</a> <a id='n9643' href='#n9643'>9643</a> <a id='n9644' href='#n9644'>9644</a> <a id='n9645' href='#n9645'>9645</a> <a id='n9646' href='#n9646'>9646</a> <a id='n9647' href='#n9647'>9647</a> <a id='n9648' href='#n9648'>9648</a> <a id='n9649' href='#n9649'>9649</a> <a id='n9650' href='#n9650'>9650</a> <a id='n9651' href='#n9651'>9651</a> <a id='n9652' href='#n9652'>9652</a> <a id='n9653' href='#n9653'>9653</a> <a id='n9654' href='#n9654'>9654</a> <a id='n9655' href='#n9655'>9655</a> <a id='n9656' href='#n9656'>9656</a> <a id='n9657' href='#n9657'>9657</a> <a id='n9658' href='#n9658'>9658</a> <a id='n9659' href='#n9659'>9659</a> <a id='n9660' href='#n9660'>9660</a> <a id='n9661' href='#n9661'>9661</a> <a id='n9662' href='#n9662'>9662</a> <a id='n9663' href='#n9663'>9663</a> <a id='n9664' href='#n9664'>9664</a> <a id='n9665' href='#n9665'>9665</a> <a id='n9666' href='#n9666'>9666</a> <a id='n9667' href='#n9667'>9667</a> <a id='n9668' href='#n9668'>9668</a> <a id='n9669' href='#n9669'>9669</a> <a id='n9670' href='#n9670'>9670</a> <a id='n9671' href='#n9671'>9671</a> <a id='n9672' href='#n9672'>9672</a> <a id='n9673' href='#n9673'>9673</a> <a id='n9674' href='#n9674'>9674</a> <a id='n9675' href='#n9675'>9675</a> <a id='n9676' href='#n9676'>9676</a> <a id='n9677' href='#n9677'>9677</a> <a id='n9678' href='#n9678'>9678</a> <a id='n9679' href='#n9679'>9679</a> <a id='n9680' href='#n9680'>9680</a> <a id='n9681' href='#n9681'>9681</a> <a id='n9682' href='#n9682'>9682</a> <a id='n9683' href='#n9683'>9683</a> <a id='n9684' href='#n9684'>9684</a> <a id='n9685' href='#n9685'>9685</a> <a id='n9686' href='#n9686'>9686</a> <a id='n9687' href='#n9687'>9687</a> <a id='n9688' href='#n9688'>9688</a> <a id='n9689' href='#n9689'>9689</a> <a id='n9690' href='#n9690'>9690</a> <a id='n9691' href='#n9691'>9691</a> <a id='n9692' href='#n9692'>9692</a> <a id='n9693' href='#n9693'>9693</a> <a id='n9694' href='#n9694'>9694</a> <a id='n9695' href='#n9695'>9695</a> <a id='n9696' href='#n9696'>9696</a> <a id='n9697' href='#n9697'>9697</a> <a id='n9698' href='#n9698'>9698</a> <a id='n9699' href='#n9699'>9699</a> <a id='n9700' href='#n9700'>9700</a> <a id='n9701' href='#n9701'>9701</a> <a id='n9702' href='#n9702'>9702</a> <a id='n9703' href='#n9703'>9703</a> <a id='n9704' href='#n9704'>9704</a> <a id='n9705' href='#n9705'>9705</a> <a id='n9706' href='#n9706'>9706</a> <a id='n9707' href='#n9707'>9707</a> <a id='n9708' href='#n9708'>9708</a> <a id='n9709' href='#n9709'>9709</a> <a id='n9710' href='#n9710'>9710</a> <a id='n9711' href='#n9711'>9711</a> <a id='n9712' href='#n9712'>9712</a> <a id='n9713' href='#n9713'>9713</a> <a id='n9714' href='#n9714'>9714</a> <a id='n9715' href='#n9715'>9715</a> <a id='n9716' href='#n9716'>9716</a> <a id='n9717' href='#n9717'>9717</a> <a id='n9718' href='#n9718'>9718</a> <a id='n9719' href='#n9719'>9719</a> <a id='n9720' href='#n9720'>9720</a> <a id='n9721' href='#n9721'>9721</a> <a id='n9722' href='#n9722'>9722</a> <a id='n9723' href='#n9723'>9723</a> <a id='n9724' href='#n9724'>9724</a> <a id='n9725' href='#n9725'>9725</a> <a id='n9726' href='#n9726'>9726</a> <a id='n9727' href='#n9727'>9727</a> <a id='n9728' href='#n9728'>9728</a> <a id='n9729' href='#n9729'>9729</a> <a id='n9730' href='#n9730'>9730</a> <a id='n9731' href='#n9731'>9731</a> <a id='n9732' href='#n9732'>9732</a> <a id='n9733' href='#n9733'>9733</a> <a id='n9734' href='#n9734'>9734</a> <a id='n9735' href='#n9735'>9735</a> <a id='n9736' href='#n9736'>9736</a> <a id='n9737' href='#n9737'>9737</a> <a id='n9738' href='#n9738'>9738</a> <a id='n9739' href='#n9739'>9739</a> <a id='n9740' href='#n9740'>9740</a> <a id='n9741' href='#n9741'>9741</a> <a id='n9742' href='#n9742'>9742</a> <a id='n9743' href='#n9743'>9743</a> <a id='n9744' href='#n9744'>9744</a> <a id='n9745' href='#n9745'>9745</a> <a id='n9746' href='#n9746'>9746</a> <a id='n9747' href='#n9747'>9747</a> <a id='n9748' href='#n9748'>9748</a> <a id='n9749' href='#n9749'>9749</a> <a id='n9750' href='#n9750'>9750</a> <a id='n9751' href='#n9751'>9751</a> <a id='n9752' href='#n9752'>9752</a> <a id='n9753' href='#n9753'>9753</a> <a id='n9754' href='#n9754'>9754</a> <a id='n9755' href='#n9755'>9755</a> <a id='n9756' href='#n9756'>9756</a> <a id='n9757' href='#n9757'>9757</a> <a id='n9758' href='#n9758'>9758</a> <a id='n9759' href='#n9759'>9759</a> <a id='n9760' href='#n9760'>9760</a> <a id='n9761' href='#n9761'>9761</a> <a id='n9762' href='#n9762'>9762</a> <a id='n9763' href='#n9763'>9763</a> <a id='n9764' href='#n9764'>9764</a> <a id='n9765' href='#n9765'>9765</a> <a id='n9766' href='#n9766'>9766</a> <a id='n9767' href='#n9767'>9767</a> <a id='n9768' href='#n9768'>9768</a> <a id='n9769' href='#n9769'>9769</a> <a id='n9770' href='#n9770'>9770</a> <a id='n9771' href='#n9771'>9771</a> <a id='n9772' href='#n9772'>9772</a> <a id='n9773' href='#n9773'>9773</a> <a id='n9774' href='#n9774'>9774</a> <a id='n9775' href='#n9775'>9775</a> <a id='n9776' href='#n9776'>9776</a> <a id='n9777' href='#n9777'>9777</a> <a id='n9778' href='#n9778'>9778</a> <a id='n9779' href='#n9779'>9779</a> <a id='n9780' href='#n9780'>9780</a> <a id='n9781' href='#n9781'>9781</a> <a id='n9782' href='#n9782'>9782</a> <a id='n9783' href='#n9783'>9783</a> <a id='n9784' href='#n9784'>9784</a> <a id='n9785' href='#n9785'>9785</a> <a id='n9786' href='#n9786'>9786</a> <a id='n9787' href='#n9787'>9787</a> <a id='n9788' href='#n9788'>9788</a> <a id='n9789' href='#n9789'>9789</a> <a id='n9790' href='#n9790'>9790</a> <a id='n9791' href='#n9791'>9791</a> <a id='n9792' href='#n9792'>9792</a> <a id='n9793' href='#n9793'>9793</a> <a id='n9794' href='#n9794'>9794</a> <a id='n9795' href='#n9795'>9795</a> <a id='n9796' href='#n9796'>9796</a> <a id='n9797' href='#n9797'>9797</a> <a id='n9798' href='#n9798'>9798</a> <a id='n9799' href='#n9799'>9799</a> <a id='n9800' href='#n9800'>9800</a> <a id='n9801' href='#n9801'>9801</a> <a id='n9802' href='#n9802'>9802</a> <a id='n9803' href='#n9803'>9803</a> <a id='n9804' href='#n9804'>9804</a> <a id='n9805' href='#n9805'>9805</a> <a id='n9806' href='#n9806'>9806</a> <a id='n9807' href='#n9807'>9807</a> <a id='n9808' href='#n9808'>9808</a> <a id='n9809' href='#n9809'>9809</a> <a id='n9810' href='#n9810'>9810</a> <a id='n9811' href='#n9811'>9811</a> <a id='n9812' href='#n9812'>9812</a> <a id='n9813' href='#n9813'>9813</a> <a id='n9814' href='#n9814'>9814</a> <a id='n9815' href='#n9815'>9815</a> <a id='n9816' href='#n9816'>9816</a> <a id='n9817' href='#n9817'>9817</a> <a id='n9818' href='#n9818'>9818</a> <a id='n9819' href='#n9819'>9819</a> <a id='n9820' href='#n9820'>9820</a> <a id='n9821' href='#n9821'>9821</a> <a id='n9822' href='#n9822'>9822</a> <a id='n9823' href='#n9823'>9823</a> <a id='n9824' href='#n9824'>9824</a> <a id='n9825' href='#n9825'>9825</a> <a id='n9826' href='#n9826'>9826</a> <a id='n9827' href='#n9827'>9827</a> <a id='n9828' href='#n9828'>9828</a> <a id='n9829' href='#n9829'>9829</a> <a id='n9830' href='#n9830'>9830</a> <a id='n9831' href='#n9831'>9831</a> <a id='n9832' href='#n9832'>9832</a> <a id='n9833' href='#n9833'>9833</a> <a id='n9834' href='#n9834'>9834</a> <a id='n9835' href='#n9835'>9835</a> <a id='n9836' href='#n9836'>9836</a> <a id='n9837' href='#n9837'>9837</a> <a id='n9838' href='#n9838'>9838</a> <a id='n9839' href='#n9839'>9839</a> <a id='n9840' href='#n9840'>9840</a> <a id='n9841' href='#n9841'>9841</a> <a id='n9842' href='#n9842'>9842</a> <a id='n9843' href='#n9843'>9843</a> <a id='n9844' href='#n9844'>9844</a> <a id='n9845' href='#n9845'>9845</a> <a id='n9846' href='#n9846'>9846</a> <a id='n9847' href='#n9847'>9847</a> <a id='n9848' href='#n9848'>9848</a> <a id='n9849' href='#n9849'>9849</a> <a id='n9850' href='#n9850'>9850</a> <a id='n9851' href='#n9851'>9851</a> <a id='n9852' href='#n9852'>9852</a> <a id='n9853' href='#n9853'>9853</a> <a id='n9854' href='#n9854'>9854</a> <a id='n9855' href='#n9855'>9855</a> <a id='n9856' href='#n9856'>9856</a> <a id='n9857' href='#n9857'>9857</a> <a id='n9858' href='#n9858'>9858</a> <a id='n9859' href='#n9859'>9859</a> <a id='n9860' href='#n9860'>9860</a> <a id='n9861' href='#n9861'>9861</a> <a id='n9862' href='#n9862'>9862</a> <a id='n9863' href='#n9863'>9863</a> <a id='n9864' href='#n9864'>9864</a> <a id='n9865' href='#n9865'>9865</a> <a id='n9866' href='#n9866'>9866</a> <a id='n9867' href='#n9867'>9867</a> <a id='n9868' href='#n9868'>9868</a> <a id='n9869' href='#n9869'>9869</a> <a id='n9870' href='#n9870'>9870</a> <a id='n9871' href='#n9871'>9871</a> <a id='n9872' href='#n9872'>9872</a> <a id='n9873' href='#n9873'>9873</a> <a id='n9874' href='#n9874'>9874</a> <a id='n9875' href='#n9875'>9875</a> <a id='n9876' href='#n9876'>9876</a> <a id='n9877' href='#n9877'>9877</a> <a id='n9878' href='#n9878'>9878</a> <a id='n9879' href='#n9879'>9879</a> <a id='n9880' href='#n9880'>9880</a> <a id='n9881' href='#n9881'>9881</a> <a id='n9882' href='#n9882'>9882</a> <a id='n9883' href='#n9883'>9883</a> <a id='n9884' href='#n9884'>9884</a> <a id='n9885' href='#n9885'>9885</a> <a id='n9886' href='#n9886'>9886</a> <a id='n9887' href='#n9887'>9887</a> <a id='n9888' href='#n9888'>9888</a> <a id='n9889' href='#n9889'>9889</a> <a id='n9890' href='#n9890'>9890</a> <a id='n9891' href='#n9891'>9891</a> <a id='n9892' href='#n9892'>9892</a> <a id='n9893' href='#n9893'>9893</a> <a id='n9894' href='#n9894'>9894</a> <a id='n9895' href='#n9895'>9895</a> <a id='n9896' href='#n9896'>9896</a> <a id='n9897' href='#n9897'>9897</a> <a id='n9898' href='#n9898'>9898</a> <a id='n9899' href='#n9899'>9899</a> <a id='n9900' href='#n9900'>9900</a> <a id='n9901' href='#n9901'>9901</a> <a id='n9902' href='#n9902'>9902</a> <a id='n9903' href='#n9903'>9903</a> <a id='n9904' href='#n9904'>9904</a> <a id='n9905' href='#n9905'>9905</a> <a id='n9906' href='#n9906'>9906</a> <a id='n9907' href='#n9907'>9907</a> <a id='n9908' href='#n9908'>9908</a> <a id='n9909' href='#n9909'>9909</a> <a id='n9910' href='#n9910'>9910</a> <a id='n9911' href='#n9911'>9911</a> <a id='n9912' href='#n9912'>9912</a> <a id='n9913' href='#n9913'>9913</a> <a id='n9914' href='#n9914'>9914</a> <a id='n9915' href='#n9915'>9915</a> <a id='n9916' href='#n9916'>9916</a> <a id='n9917' href='#n9917'>9917</a> <a id='n9918' href='#n9918'>9918</a> <a id='n9919' href='#n9919'>9919</a> <a id='n9920' href='#n9920'>9920</a> <a id='n9921' href='#n9921'>9921</a> <a id='n9922' href='#n9922'>9922</a> <a id='n9923' href='#n9923'>9923</a> <a id='n9924' href='#n9924'>9924</a> <a id='n9925' href='#n9925'>9925</a> <a id='n9926' href='#n9926'>9926</a> <a id='n9927' href='#n9927'>9927</a> <a id='n9928' href='#n9928'>9928</a> <a id='n9929' href='#n9929'>9929</a> <a id='n9930' href='#n9930'>9930</a> <a id='n9931' href='#n9931'>9931</a> <a id='n9932' href='#n9932'>9932</a> <a id='n9933' href='#n9933'>9933</a> <a id='n9934' href='#n9934'>9934</a> <a id='n9935' href='#n9935'>9935</a> <a id='n9936' href='#n9936'>9936</a> <a id='n9937' href='#n9937'>9937</a> <a id='n9938' href='#n9938'>9938</a> <a id='n9939' href='#n9939'>9939</a> <a id='n9940' href='#n9940'>9940</a> <a id='n9941' href='#n9941'>9941</a> <a id='n9942' href='#n9942'>9942</a> <a id='n9943' href='#n9943'>9943</a> <a id='n9944' href='#n9944'>9944</a> <a id='n9945' href='#n9945'>9945</a> <a id='n9946' href='#n9946'>9946</a> <a id='n9947' href='#n9947'>9947</a> <a id='n9948' href='#n9948'>9948</a> <a id='n9949' href='#n9949'>9949</a> <a id='n9950' href='#n9950'>9950</a> <a id='n9951' href='#n9951'>9951</a> <a id='n9952' href='#n9952'>9952</a> <a id='n9953' href='#n9953'>9953</a> <a id='n9954' href='#n9954'>9954</a> <a id='n9955' href='#n9955'>9955</a> <a id='n9956' href='#n9956'>9956</a> <a id='n9957' href='#n9957'>9957</a> <a id='n9958' href='#n9958'>9958</a> <a id='n9959' href='#n9959'>9959</a> <a id='n9960' href='#n9960'>9960</a> <a id='n9961' href='#n9961'>9961</a> <a id='n9962' href='#n9962'>9962</a> <a id='n9963' href='#n9963'>9963</a> <a id='n9964' href='#n9964'>9964</a> <a id='n9965' href='#n9965'>9965</a> <a id='n9966' href='#n9966'>9966</a> <a id='n9967' href='#n9967'>9967</a> <a id='n9968' href='#n9968'>9968</a> <a id='n9969' href='#n9969'>9969</a> <a id='n9970' href='#n9970'>9970</a> <a id='n9971' href='#n9971'>9971</a> <a id='n9972' href='#n9972'>9972</a> <a id='n9973' href='#n9973'>9973</a> <a id='n9974' href='#n9974'>9974</a> <a id='n9975' href='#n9975'>9975</a> <a id='n9976' href='#n9976'>9976</a> <a id='n9977' href='#n9977'>9977</a> <a id='n9978' href='#n9978'>9978</a> <a id='n9979' href='#n9979'>9979</a> <a id='n9980' href='#n9980'>9980</a> <a id='n9981' href='#n9981'>9981</a> <a id='n9982' href='#n9982'>9982</a> <a id='n9983' href='#n9983'>9983</a> <a id='n9984' href='#n9984'>9984</a> <a id='n9985' href='#n9985'>9985</a> <a id='n9986' href='#n9986'>9986</a> <a id='n9987' href='#n9987'>9987</a> <a id='n9988' href='#n9988'>9988</a> <a id='n9989' href='#n9989'>9989</a> <a id='n9990' href='#n9990'>9990</a> <a id='n9991' href='#n9991'>9991</a> <a id='n9992' href='#n9992'>9992</a> <a id='n9993' href='#n9993'>9993</a> <a id='n9994' href='#n9994'>9994</a> <a id='n9995' href='#n9995'>9995</a> <a id='n9996' href='#n9996'>9996</a> <a id='n9997' href='#n9997'>9997</a> <a id='n9998' href='#n9998'>9998</a> <a id='n9999' href='#n9999'>9999</a> <a id='n10000' href='#n10000'>10000</a> <a id='n10001' href='#n10001'>10001</a> <a id='n10002' href='#n10002'>10002</a> <a id='n10003' href='#n10003'>10003</a> <a id='n10004' href='#n10004'>10004</a> <a id='n10005' href='#n10005'>10005</a> <a id='n10006' href='#n10006'>10006</a> <a id='n10007' href='#n10007'>10007</a> <a id='n10008' href='#n10008'>10008</a> <a id='n10009' href='#n10009'>10009</a> <a id='n10010' href='#n10010'>10010</a> <a id='n10011' href='#n10011'>10011</a> <a id='n10012' href='#n10012'>10012</a> <a id='n10013' href='#n10013'>10013</a> <a id='n10014' href='#n10014'>10014</a> <a id='n10015' href='#n10015'>10015</a> <a id='n10016' href='#n10016'>10016</a> <a id='n10017' href='#n10017'>10017</a> <a id='n10018' href='#n10018'>10018</a> <a id='n10019' href='#n10019'>10019</a> <a id='n10020' href='#n10020'>10020</a> <a id='n10021' href='#n10021'>10021</a> <a id='n10022' href='#n10022'>10022</a> <a id='n10023' href='#n10023'>10023</a> <a id='n10024' href='#n10024'>10024</a> <a id='n10025' href='#n10025'>10025</a> <a id='n10026' href='#n10026'>10026</a> <a id='n10027' href='#n10027'>10027</a> <a id='n10028' href='#n10028'>10028</a> <a id='n10029' href='#n10029'>10029</a> <a id='n10030' href='#n10030'>10030</a> <a id='n10031' href='#n10031'>10031</a> <a id='n10032' href='#n10032'>10032</a> <a id='n10033' href='#n10033'>10033</a> <a id='n10034' href='#n10034'>10034</a> <a id='n10035' href='#n10035'>10035</a> <a id='n10036' href='#n10036'>10036</a> <a id='n10037' href='#n10037'>10037</a> <a id='n10038' href='#n10038'>10038</a> <a id='n10039' href='#n10039'>10039</a> <a id='n10040' href='#n10040'>10040</a> <a id='n10041' href='#n10041'>10041</a> <a id='n10042' href='#n10042'>10042</a> <a id='n10043' href='#n10043'>10043</a> <a id='n10044' href='#n10044'>10044</a> <a id='n10045' href='#n10045'>10045</a> <a id='n10046' href='#n10046'>10046</a> <a id='n10047' href='#n10047'>10047</a> <a id='n10048' href='#n10048'>10048</a> <a id='n10049' href='#n10049'>10049</a> <a id='n10050' href='#n10050'>10050</a> <a id='n10051' href='#n10051'>10051</a> <a id='n10052' href='#n10052'>10052</a> <a id='n10053' href='#n10053'>10053</a> <a id='n10054' href='#n10054'>10054</a> <a id='n10055' href='#n10055'>10055</a> <a id='n10056' href='#n10056'>10056</a> <a id='n10057' href='#n10057'>10057</a> <a id='n10058' href='#n10058'>10058</a> <a id='n10059' href='#n10059'>10059</a> <a id='n10060' href='#n10060'>10060</a> <a id='n10061' href='#n10061'>10061</a> <a id='n10062' href='#n10062'>10062</a> <a id='n10063' href='#n10063'>10063</a> <a id='n10064' href='#n10064'>10064</a> <a id='n10065' href='#n10065'>10065</a> <a id='n10066' href='#n10066'>10066</a> <a id='n10067' href='#n10067'>10067</a> <a id='n10068' href='#n10068'>10068</a> <a id='n10069' href='#n10069'>10069</a> <a id='n10070' href='#n10070'>10070</a> <a id='n10071' href='#n10071'>10071</a> <a id='n10072' href='#n10072'>10072</a> <a id='n10073' href='#n10073'>10073</a> <a id='n10074' href='#n10074'>10074</a> <a id='n10075' href='#n10075'>10075</a> <a id='n10076' href='#n10076'>10076</a> <a id='n10077' href='#n10077'>10077</a> <a id='n10078' href='#n10078'>10078</a> <a id='n10079' href='#n10079'>10079</a> <a id='n10080' href='#n10080'>10080</a> <a id='n10081' href='#n10081'>10081</a> <a id='n10082' href='#n10082'>10082</a> <a id='n10083' href='#n10083'>10083</a> <a id='n10084' href='#n10084'>10084</a> <a id='n10085' href='#n10085'>10085</a> <a id='n10086' href='#n10086'>10086</a> <a id='n10087' href='#n10087'>10087</a> <a id='n10088' href='#n10088'>10088</a> <a id='n10089' href='#n10089'>10089</a> <a id='n10090' href='#n10090'>10090</a> <a id='n10091' href='#n10091'>10091</a> <a id='n10092' href='#n10092'>10092</a> <a id='n10093' href='#n10093'>10093</a> <a id='n10094' href='#n10094'>10094</a> <a id='n10095' href='#n10095'>10095</a> <a id='n10096' href='#n10096'>10096</a> <a id='n10097' href='#n10097'>10097</a> <a id='n10098' href='#n10098'>10098</a> <a id='n10099' href='#n10099'>10099</a> <a id='n10100' href='#n10100'>10100</a> <a id='n10101' href='#n10101'>10101</a> <a id='n10102' href='#n10102'>10102</a> <a id='n10103' href='#n10103'>10103</a> <a id='n10104' href='#n10104'>10104</a> <a id='n10105' href='#n10105'>10105</a> <a id='n10106' href='#n10106'>10106</a> <a id='n10107' href='#n10107'>10107</a> <a id='n10108' href='#n10108'>10108</a> <a id='n10109' href='#n10109'>10109</a> <a id='n10110' href='#n10110'>10110</a> <a id='n10111' href='#n10111'>10111</a> <a id='n10112' href='#n10112'>10112</a> <a id='n10113' href='#n10113'>10113</a> <a id='n10114' href='#n10114'>10114</a> <a id='n10115' href='#n10115'>10115</a> <a id='n10116' href='#n10116'>10116</a> <a id='n10117' href='#n10117'>10117</a> <a id='n10118' href='#n10118'>10118</a> <a id='n10119' href='#n10119'>10119</a> <a id='n10120' href='#n10120'>10120</a> <a id='n10121' href='#n10121'>10121</a> <a id='n10122' href='#n10122'>10122</a> <a id='n10123' href='#n10123'>10123</a> <a id='n10124' href='#n10124'>10124</a> <a id='n10125' href='#n10125'>10125</a> <a id='n10126' href='#n10126'>10126</a> <a id='n10127' href='#n10127'>10127</a> <a id='n10128' href='#n10128'>10128</a> <a id='n10129' href='#n10129'>10129</a> <a id='n10130' href='#n10130'>10130</a> <a id='n10131' href='#n10131'>10131</a> <a id='n10132' href='#n10132'>10132</a> <a id='n10133' href='#n10133'>10133</a> <a id='n10134' href='#n10134'>10134</a> <a id='n10135' href='#n10135'>10135</a> <a id='n10136' href='#n10136'>10136</a> <a id='n10137' href='#n10137'>10137</a> <a id='n10138' href='#n10138'>10138</a> <a id='n10139' href='#n10139'>10139</a> <a id='n10140' href='#n10140'>10140</a> <a id='n10141' href='#n10141'>10141</a> <a id='n10142' href='#n10142'>10142</a> <a id='n10143' href='#n10143'>10143</a> <a id='n10144' href='#n10144'>10144</a> <a id='n10145' href='#n10145'>10145</a> <a id='n10146' href='#n10146'>10146</a> <a id='n10147' href='#n10147'>10147</a> <a id='n10148' href='#n10148'>10148</a> <a id='n10149' href='#n10149'>10149</a> <a id='n10150' href='#n10150'>10150</a> <a id='n10151' href='#n10151'>10151</a> <a id='n10152' href='#n10152'>10152</a> <a id='n10153' href='#n10153'>10153</a> <a id='n10154' href='#n10154'>10154</a> <a id='n10155' href='#n10155'>10155</a> <a id='n10156' href='#n10156'>10156</a> <a id='n10157' href='#n10157'>10157</a> <a id='n10158' href='#n10158'>10158</a> <a id='n10159' href='#n10159'>10159</a> <a id='n10160' href='#n10160'>10160</a> <a id='n10161' href='#n10161'>10161</a> <a id='n10162' href='#n10162'>10162</a> <a id='n10163' href='#n10163'>10163</a> <a id='n10164' href='#n10164'>10164</a> <a id='n10165' href='#n10165'>10165</a> <a id='n10166' href='#n10166'>10166</a> <a id='n10167' href='#n10167'>10167</a> <a id='n10168' href='#n10168'>10168</a> <a id='n10169' href='#n10169'>10169</a> <a id='n10170' href='#n10170'>10170</a> <a id='n10171' href='#n10171'>10171</a> <a id='n10172' href='#n10172'>10172</a> <a id='n10173' href='#n10173'>10173</a> <a id='n10174' href='#n10174'>10174</a> <a id='n10175' href='#n10175'>10175</a> <a id='n10176' href='#n10176'>10176</a> <a id='n10177' href='#n10177'>10177</a> <a id='n10178' href='#n10178'>10178</a> <a id='n10179' href='#n10179'>10179</a> <a id='n10180' href='#n10180'>10180</a> <a id='n10181' href='#n10181'>10181</a> <a id='n10182' href='#n10182'>10182</a> <a id='n10183' href='#n10183'>10183</a> <a id='n10184' href='#n10184'>10184</a> <a id='n10185' href='#n10185'>10185</a> <a id='n10186' href='#n10186'>10186</a> <a id='n10187' href='#n10187'>10187</a> <a id='n10188' href='#n10188'>10188</a> <a id='n10189' href='#n10189'>10189</a> <a id='n10190' href='#n10190'>10190</a> <a id='n10191' href='#n10191'>10191</a> <a id='n10192' href='#n10192'>10192</a> <a id='n10193' href='#n10193'>10193</a> <a id='n10194' href='#n10194'>10194</a> <a id='n10195' href='#n10195'>10195</a> <a id='n10196' href='#n10196'>10196</a> <a id='n10197' href='#n10197'>10197</a> <a id='n10198' href='#n10198'>10198</a> <a id='n10199' href='#n10199'>10199</a> <a id='n10200' href='#n10200'>10200</a> <a id='n10201' href='#n10201'>10201</a> <a id='n10202' href='#n10202'>10202</a> <a id='n10203' href='#n10203'>10203</a> <a id='n10204' href='#n10204'>10204</a> <a id='n10205' href='#n10205'>10205</a> <a id='n10206' href='#n10206'>10206</a> <a id='n10207' href='#n10207'>10207</a> <a id='n10208' href='#n10208'>10208</a> <a id='n10209' href='#n10209'>10209</a> <a id='n10210' href='#n10210'>10210</a> <a id='n10211' href='#n10211'>10211</a> <a id='n10212' href='#n10212'>10212</a> <a id='n10213' href='#n10213'>10213</a> <a id='n10214' href='#n10214'>10214</a> <a id='n10215' href='#n10215'>10215</a> <a id='n10216' href='#n10216'>10216</a> <a id='n10217' href='#n10217'>10217</a> <a id='n10218' href='#n10218'>10218</a> <a id='n10219' href='#n10219'>10219</a> <a id='n10220' href='#n10220'>10220</a> <a id='n10221' href='#n10221'>10221</a> <a id='n10222' href='#n10222'>10222</a> <a id='n10223' href='#n10223'>10223</a> <a id='n10224' href='#n10224'>10224</a> <a id='n10225' href='#n10225'>10225</a> <a id='n10226' href='#n10226'>10226</a> <a id='n10227' href='#n10227'>10227</a> <a id='n10228' href='#n10228'>10228</a> <a id='n10229' href='#n10229'>10229</a> <a id='n10230' href='#n10230'>10230</a> <a id='n10231' href='#n10231'>10231</a> <a id='n10232' href='#n10232'>10232</a> <a id='n10233' href='#n10233'>10233</a> <a id='n10234' href='#n10234'>10234</a> <a id='n10235' href='#n10235'>10235</a> <a id='n10236' href='#n10236'>10236</a> <a id='n10237' href='#n10237'>10237</a> <a id='n10238' href='#n10238'>10238</a> <a id='n10239' href='#n10239'>10239</a> <a id='n10240' href='#n10240'>10240</a> <a id='n10241' href='#n10241'>10241</a> <a id='n10242' href='#n10242'>10242</a> <a id='n10243' href='#n10243'>10243</a> <a id='n10244' href='#n10244'>10244</a> <a id='n10245' href='#n10245'>10245</a> <a id='n10246' href='#n10246'>10246</a> <a id='n10247' href='#n10247'>10247</a> <a id='n10248' href='#n10248'>10248</a> <a id='n10249' href='#n10249'>10249</a> <a id='n10250' href='#n10250'>10250</a> <a id='n10251' href='#n10251'>10251</a> <a id='n10252' href='#n10252'>10252</a> <a id='n10253' href='#n10253'>10253</a> <a id='n10254' href='#n10254'>10254</a> <a id='n10255' href='#n10255'>10255</a> <a id='n10256' href='#n10256'>10256</a> <a id='n10257' href='#n10257'>10257</a> <a id='n10258' href='#n10258'>10258</a> <a id='n10259' href='#n10259'>10259</a> <a id='n10260' href='#n10260'>10260</a> <a id='n10261' href='#n10261'>10261</a> <a id='n10262' href='#n10262'>10262</a> <a id='n10263' href='#n10263'>10263</a> <a id='n10264' href='#n10264'>10264</a> <a id='n10265' href='#n10265'>10265</a> <a id='n10266' href='#n10266'>10266</a> <a id='n10267' href='#n10267'>10267</a> <a id='n10268' href='#n10268'>10268</a> <a id='n10269' href='#n10269'>10269</a> <a id='n10270' href='#n10270'>10270</a> <a id='n10271' href='#n10271'>10271</a> <a id='n10272' href='#n10272'>10272</a> <a id='n10273' href='#n10273'>10273</a> <a id='n10274' href='#n10274'>10274</a> <a id='n10275' href='#n10275'>10275</a> <a id='n10276' href='#n10276'>10276</a> <a id='n10277' href='#n10277'>10277</a> <a id='n10278' href='#n10278'>10278</a> <a id='n10279' href='#n10279'>10279</a> <a id='n10280' href='#n10280'>10280</a> <a id='n10281' href='#n10281'>10281</a> <a id='n10282' href='#n10282'>10282</a> <a id='n10283' href='#n10283'>10283</a> <a id='n10284' href='#n10284'>10284</a> <a id='n10285' href='#n10285'>10285</a> <a id='n10286' href='#n10286'>10286</a> <a id='n10287' href='#n10287'>10287</a> <a id='n10288' href='#n10288'>10288</a> <a id='n10289' href='#n10289'>10289</a> <a id='n10290' href='#n10290'>10290</a> <a id='n10291' href='#n10291'>10291</a> <a id='n10292' href='#n10292'>10292</a> <a id='n10293' href='#n10293'>10293</a> <a id='n10294' href='#n10294'>10294</a> <a id='n10295' href='#n10295'>10295</a> <a id='n10296' href='#n10296'>10296</a> <a id='n10297' href='#n10297'>10297</a> <a id='n10298' href='#n10298'>10298</a> <a id='n10299' href='#n10299'>10299</a> <a id='n10300' href='#n10300'>10300</a> <a id='n10301' href='#n10301'>10301</a> <a id='n10302' href='#n10302'>10302</a> <a id='n10303' href='#n10303'>10303</a> <a id='n10304' href='#n10304'>10304</a> <a id='n10305' href='#n10305'>10305</a> <a id='n10306' href='#n10306'>10306</a> <a id='n10307' href='#n10307'>10307</a> <a id='n10308' href='#n10308'>10308</a> <a id='n10309' href='#n10309'>10309</a> <a id='n10310' href='#n10310'>10310</a> <a id='n10311' href='#n10311'>10311</a> <a id='n10312' href='#n10312'>10312</a> <a id='n10313' href='#n10313'>10313</a> <a id='n10314' href='#n10314'>10314</a> <a id='n10315' href='#n10315'>10315</a> <a id='n10316' href='#n10316'>10316</a> <a id='n10317' href='#n10317'>10317</a> <a id='n10318' href='#n10318'>10318</a> <a id='n10319' href='#n10319'>10319</a> <a id='n10320' href='#n10320'>10320</a> <a id='n10321' href='#n10321'>10321</a> <a id='n10322' href='#n10322'>10322</a> <a id='n10323' href='#n10323'>10323</a> <a id='n10324' href='#n10324'>10324</a> <a id='n10325' href='#n10325'>10325</a> <a id='n10326' href='#n10326'>10326</a> <a id='n10327' href='#n10327'>10327</a> <a id='n10328' href='#n10328'>10328</a> <a id='n10329' href='#n10329'>10329</a> <a id='n10330' href='#n10330'>10330</a> <a id='n10331' href='#n10331'>10331</a> <a id='n10332' href='#n10332'>10332</a> <a id='n10333' href='#n10333'>10333</a> <a id='n10334' href='#n10334'>10334</a> <a id='n10335' href='#n10335'>10335</a> <a id='n10336' href='#n10336'>10336</a> <a id='n10337' href='#n10337'>10337</a> <a id='n10338' href='#n10338'>10338</a> <a id='n10339' href='#n10339'>10339</a> <a id='n10340' href='#n10340'>10340</a> <a id='n10341' href='#n10341'>10341</a> <a id='n10342' href='#n10342'>10342</a> <a id='n10343' href='#n10343'>10343</a> <a id='n10344' href='#n10344'>10344</a> <a id='n10345' href='#n10345'>10345</a> <a id='n10346' href='#n10346'>10346</a> <a id='n10347' href='#n10347'>10347</a> <a id='n10348' href='#n10348'>10348</a> <a id='n10349' href='#n10349'>10349</a> <a id='n10350' href='#n10350'>10350</a> <a id='n10351' href='#n10351'>10351</a> <a id='n10352' href='#n10352'>10352</a> <a id='n10353' href='#n10353'>10353</a> <a id='n10354' href='#n10354'>10354</a> <a id='n10355' href='#n10355'>10355</a> <a id='n10356' href='#n10356'>10356</a> <a id='n10357' href='#n10357'>10357</a> <a id='n10358' href='#n10358'>10358</a> <a id='n10359' href='#n10359'>10359</a> <a id='n10360' href='#n10360'>10360</a> <a id='n10361' href='#n10361'>10361</a> <a id='n10362' href='#n10362'>10362</a> <a id='n10363' href='#n10363'>10363</a> <a id='n10364' href='#n10364'>10364</a> <a id='n10365' href='#n10365'>10365</a> <a id='n10366' href='#n10366'>10366</a> <a id='n10367' href='#n10367'>10367</a> <a id='n10368' href='#n10368'>10368</a> <a id='n10369' href='#n10369'>10369</a> <a id='n10370' href='#n10370'>10370</a> <a id='n10371' href='#n10371'>10371</a> <a id='n10372' href='#n10372'>10372</a> <a id='n10373' href='#n10373'>10373</a> <a id='n10374' href='#n10374'>10374</a> <a id='n10375' href='#n10375'>10375</a> <a id='n10376' href='#n10376'>10376</a> <a id='n10377' href='#n10377'>10377</a> <a id='n10378' href='#n10378'>10378</a> <a id='n10379' href='#n10379'>10379</a> <a id='n10380' href='#n10380'>10380</a> <a id='n10381' href='#n10381'>10381</a> <a id='n10382' href='#n10382'>10382</a> <a id='n10383' href='#n10383'>10383</a> <a id='n10384' href='#n10384'>10384</a> <a id='n10385' href='#n10385'>10385</a> <a id='n10386' href='#n10386'>10386</a> <a id='n10387' href='#n10387'>10387</a> <a id='n10388' href='#n10388'>10388</a> <a id='n10389' href='#n10389'>10389</a> <a id='n10390' href='#n10390'>10390</a> <a id='n10391' href='#n10391'>10391</a> <a id='n10392' href='#n10392'>10392</a> <a id='n10393' href='#n10393'>10393</a> <a id='n10394' href='#n10394'>10394</a> <a id='n10395' href='#n10395'>10395</a> <a id='n10396' href='#n10396'>10396</a> <a id='n10397' href='#n10397'>10397</a> <a id='n10398' href='#n10398'>10398</a> <a id='n10399' href='#n10399'>10399</a> <a id='n10400' href='#n10400'>10400</a> <a id='n10401' href='#n10401'>10401</a> <a id='n10402' href='#n10402'>10402</a> <a id='n10403' href='#n10403'>10403</a> <a id='n10404' href='#n10404'>10404</a> <a id='n10405' href='#n10405'>10405</a> <a id='n10406' href='#n10406'>10406</a> <a id='n10407' href='#n10407'>10407</a> <a id='n10408' href='#n10408'>10408</a> <a id='n10409' href='#n10409'>10409</a> <a id='n10410' href='#n10410'>10410</a> <a id='n10411' href='#n10411'>10411</a> <a id='n10412' href='#n10412'>10412</a> <a id='n10413' href='#n10413'>10413</a> <a id='n10414' href='#n10414'>10414</a> <a id='n10415' href='#n10415'>10415</a> <a id='n10416' href='#n10416'>10416</a> <a id='n10417' href='#n10417'>10417</a> <a id='n10418' href='#n10418'>10418</a> <a id='n10419' href='#n10419'>10419</a> <a id='n10420' href='#n10420'>10420</a> <a id='n10421' href='#n10421'>10421</a> <a id='n10422' href='#n10422'>10422</a> <a id='n10423' href='#n10423'>10423</a> <a id='n10424' href='#n10424'>10424</a> <a id='n10425' href='#n10425'>10425</a> <a id='n10426' href='#n10426'>10426</a> <a id='n10427' href='#n10427'>10427</a> <a id='n10428' href='#n10428'>10428</a> <a id='n10429' href='#n10429'>10429</a> <a id='n10430' href='#n10430'>10430</a> <a id='n10431' href='#n10431'>10431</a> <a id='n10432' href='#n10432'>10432</a> <a id='n10433' href='#n10433'>10433</a> <a id='n10434' href='#n10434'>10434</a> <a id='n10435' href='#n10435'>10435</a> <a id='n10436' href='#n10436'>10436</a> <a id='n10437' href='#n10437'>10437</a> <a id='n10438' href='#n10438'>10438</a> <a id='n10439' href='#n10439'>10439</a> <a id='n10440' href='#n10440'>10440</a> <a id='n10441' href='#n10441'>10441</a> <a id='n10442' href='#n10442'>10442</a> <a id='n10443' href='#n10443'>10443</a> <a id='n10444' href='#n10444'>10444</a> <a id='n10445' href='#n10445'>10445</a> <a id='n10446' href='#n10446'>10446</a> <a id='n10447' href='#n10447'>10447</a> <a id='n10448' href='#n10448'>10448</a> <a id='n10449' href='#n10449'>10449</a> <a id='n10450' href='#n10450'>10450</a> <a id='n10451' href='#n10451'>10451</a> <a id='n10452' href='#n10452'>10452</a> <a id='n10453' href='#n10453'>10453</a> <a id='n10454' href='#n10454'>10454</a> <a id='n10455' href='#n10455'>10455</a> <a id='n10456' href='#n10456'>10456</a> <a id='n10457' href='#n10457'>10457</a> <a id='n10458' href='#n10458'>10458</a> <a id='n10459' href='#n10459'>10459</a> <a id='n10460' href='#n10460'>10460</a> <a id='n10461' href='#n10461'>10461</a> <a id='n10462' href='#n10462'>10462</a> <a id='n10463' href='#n10463'>10463</a> <a id='n10464' href='#n10464'>10464</a> <a id='n10465' href='#n10465'>10465</a> <a id='n10466' href='#n10466'>10466</a> <a id='n10467' href='#n10467'>10467</a> <a id='n10468' href='#n10468'>10468</a> <a id='n10469' href='#n10469'>10469</a> <a id='n10470' href='#n10470'>10470</a> <a id='n10471' href='#n10471'>10471</a> <a id='n10472' href='#n10472'>10472</a> <a id='n10473' href='#n10473'>10473</a> <a id='n10474' href='#n10474'>10474</a> <a id='n10475' href='#n10475'>10475</a> <a id='n10476' href='#n10476'>10476</a> <a id='n10477' href='#n10477'>10477</a> <a id='n10478' href='#n10478'>10478</a> <a id='n10479' href='#n10479'>10479</a> <a id='n10480' href='#n10480'>10480</a> <a id='n10481' href='#n10481'>10481</a> <a id='n10482' href='#n10482'>10482</a> <a id='n10483' href='#n10483'>10483</a> <a id='n10484' href='#n10484'>10484</a> <a id='n10485' href='#n10485'>10485</a> <a id='n10486' href='#n10486'>10486</a> <a id='n10487' href='#n10487'>10487</a> <a id='n10488' href='#n10488'>10488</a> <a id='n10489' href='#n10489'>10489</a> <a id='n10490' href='#n10490'>10490</a> <a id='n10491' href='#n10491'>10491</a> <a id='n10492' href='#n10492'>10492</a> <a id='n10493' href='#n10493'>10493</a> <a id='n10494' href='#n10494'>10494</a> <a id='n10495' href='#n10495'>10495</a> <a id='n10496' href='#n10496'>10496</a> <a id='n10497' href='#n10497'>10497</a> <a id='n10498' href='#n10498'>10498</a> <a id='n10499' href='#n10499'>10499</a> <a id='n10500' href='#n10500'>10500</a> <a id='n10501' href='#n10501'>10501</a> <a id='n10502' href='#n10502'>10502</a> <a id='n10503' href='#n10503'>10503</a> <a id='n10504' href='#n10504'>10504</a> <a id='n10505' href='#n10505'>10505</a> <a id='n10506' href='#n10506'>10506</a> <a id='n10507' href='#n10507'>10507</a> <a id='n10508' href='#n10508'>10508</a> <a id='n10509' href='#n10509'>10509</a> <a id='n10510' href='#n10510'>10510</a> <a id='n10511' href='#n10511'>10511</a> <a id='n10512' href='#n10512'>10512</a> <a id='n10513' href='#n10513'>10513</a> <a id='n10514' href='#n10514'>10514</a> <a id='n10515' href='#n10515'>10515</a> <a id='n10516' href='#n10516'>10516</a> <a id='n10517' href='#n10517'>10517</a> <a id='n10518' href='#n10518'>10518</a> <a id='n10519' href='#n10519'>10519</a> <a id='n10520' href='#n10520'>10520</a> <a id='n10521' href='#n10521'>10521</a> <a id='n10522' href='#n10522'>10522</a> <a id='n10523' href='#n10523'>10523</a> <a id='n10524' href='#n10524'>10524</a> <a id='n10525' href='#n10525'>10525</a> <a id='n10526' href='#n10526'>10526</a> <a id='n10527' href='#n10527'>10527</a> <a id='n10528' href='#n10528'>10528</a> <a id='n10529' href='#n10529'>10529</a> <a id='n10530' href='#n10530'>10530</a> <a id='n10531' href='#n10531'>10531</a> <a id='n10532' href='#n10532'>10532</a> <a id='n10533' href='#n10533'>10533</a> <a id='n10534' href='#n10534'>10534</a> <a id='n10535' href='#n10535'>10535</a> <a id='n10536' href='#n10536'>10536</a> <a id='n10537' href='#n10537'>10537</a> <a id='n10538' href='#n10538'>10538</a> <a id='n10539' href='#n10539'>10539</a> <a id='n10540' href='#n10540'>10540</a> <a id='n10541' href='#n10541'>10541</a> <a id='n10542' href='#n10542'>10542</a> <a id='n10543' href='#n10543'>10543</a> <a id='n10544' href='#n10544'>10544</a> <a id='n10545' href='#n10545'>10545</a> <a id='n10546' href='#n10546'>10546</a> <a id='n10547' href='#n10547'>10547</a> <a id='n10548' href='#n10548'>10548</a> <a id='n10549' href='#n10549'>10549</a> <a id='n10550' href='#n10550'>10550</a> <a id='n10551' href='#n10551'>10551</a> <a id='n10552' href='#n10552'>10552</a> <a id='n10553' href='#n10553'>10553</a> <a id='n10554' href='#n10554'>10554</a> <a id='n10555' href='#n10555'>10555</a> <a id='n10556' href='#n10556'>10556</a> <a id='n10557' href='#n10557'>10557</a> <a id='n10558' href='#n10558'>10558</a> <a id='n10559' href='#n10559'>10559</a> <a id='n10560' href='#n10560'>10560</a> <a id='n10561' href='#n10561'>10561</a> <a id='n10562' href='#n10562'>10562</a> <a id='n10563' href='#n10563'>10563</a> <a id='n10564' href='#n10564'>10564</a> <a id='n10565' href='#n10565'>10565</a> <a id='n10566' href='#n10566'>10566</a> <a id='n10567' href='#n10567'>10567</a> <a id='n10568' href='#n10568'>10568</a> <a id='n10569' href='#n10569'>10569</a> <a id='n10570' href='#n10570'>10570</a> <a id='n10571' href='#n10571'>10571</a> <a id='n10572' href='#n10572'>10572</a> <a id='n10573' href='#n10573'>10573</a> <a id='n10574' href='#n10574'>10574</a> <a id='n10575' href='#n10575'>10575</a> <a id='n10576' href='#n10576'>10576</a> <a id='n10577' href='#n10577'>10577</a> <a id='n10578' href='#n10578'>10578</a> <a id='n10579' href='#n10579'>10579</a> <a id='n10580' href='#n10580'>10580</a> <a id='n10581' href='#n10581'>10581</a> <a id='n10582' href='#n10582'>10582</a> <a id='n10583' href='#n10583'>10583</a> <a id='n10584' href='#n10584'>10584</a> <a id='n10585' href='#n10585'>10585</a> <a id='n10586' href='#n10586'>10586</a> <a id='n10587' href='#n10587'>10587</a> <a id='n10588' href='#n10588'>10588</a> <a id='n10589' href='#n10589'>10589</a> <a id='n10590' href='#n10590'>10590</a> <a id='n10591' href='#n10591'>10591</a> <a id='n10592' href='#n10592'>10592</a> <a id='n10593' href='#n10593'>10593</a> <a id='n10594' href='#n10594'>10594</a> <a id='n10595' href='#n10595'>10595</a> <a id='n10596' href='#n10596'>10596</a> <a id='n10597' href='#n10597'>10597</a> <a id='n10598' href='#n10598'>10598</a> <a id='n10599' href='#n10599'>10599</a> <a id='n10600' href='#n10600'>10600</a> <a id='n10601' href='#n10601'>10601</a> <a id='n10602' href='#n10602'>10602</a> <a id='n10603' href='#n10603'>10603</a> <a id='n10604' href='#n10604'>10604</a> <a id='n10605' href='#n10605'>10605</a> <a id='n10606' href='#n10606'>10606</a> <a id='n10607' href='#n10607'>10607</a> <a id='n10608' href='#n10608'>10608</a> <a id='n10609' href='#n10609'>10609</a> <a id='n10610' href='#n10610'>10610</a> <a id='n10611' href='#n10611'>10611</a> <a id='n10612' href='#n10612'>10612</a> <a id='n10613' href='#n10613'>10613</a> <a id='n10614' href='#n10614'>10614</a> <a id='n10615' href='#n10615'>10615</a> <a id='n10616' href='#n10616'>10616</a> <a id='n10617' href='#n10617'>10617</a> <a id='n10618' href='#n10618'>10618</a> <a id='n10619' href='#n10619'>10619</a> <a id='n10620' href='#n10620'>10620</a> <a id='n10621' href='#n10621'>10621</a> <a id='n10622' href='#n10622'>10622</a> <a id='n10623' href='#n10623'>10623</a> <a id='n10624' href='#n10624'>10624</a> <a id='n10625' href='#n10625'>10625</a> <a id='n10626' href='#n10626'>10626</a> <a id='n10627' href='#n10627'>10627</a> <a id='n10628' href='#n10628'>10628</a> <a id='n10629' href='#n10629'>10629</a> <a id='n10630' href='#n10630'>10630</a> <a id='n10631' href='#n10631'>10631</a> <a id='n10632' href='#n10632'>10632</a> <a id='n10633' href='#n10633'>10633</a> <a id='n10634' href='#n10634'>10634</a> <a id='n10635' href='#n10635'>10635</a> <a id='n10636' href='#n10636'>10636</a> <a id='n10637' href='#n10637'>10637</a> <a id='n10638' href='#n10638'>10638</a> <a id='n10639' href='#n10639'>10639</a> <a id='n10640' href='#n10640'>10640</a> <a id='n10641' href='#n10641'>10641</a> <a id='n10642' href='#n10642'>10642</a> <a id='n10643' href='#n10643'>10643</a> <a id='n10644' href='#n10644'>10644</a> <a id='n10645' href='#n10645'>10645</a> <a id='n10646' href='#n10646'>10646</a> <a id='n10647' href='#n10647'>10647</a> <a id='n10648' href='#n10648'>10648</a> <a id='n10649' href='#n10649'>10649</a> <a id='n10650' href='#n10650'>10650</a> <a id='n10651' href='#n10651'>10651</a> <a id='n10652' href='#n10652'>10652</a> <a id='n10653' href='#n10653'>10653</a> <a id='n10654' href='#n10654'>10654</a> <a id='n10655' href='#n10655'>10655</a> <a id='n10656' href='#n10656'>10656</a> <a id='n10657' href='#n10657'>10657</a> <a id='n10658' href='#n10658'>10658</a> <a id='n10659' href='#n10659'>10659</a> <a id='n10660' href='#n10660'>10660</a> <a id='n10661' href='#n10661'>10661</a> <a id='n10662' href='#n10662'>10662</a> <a id='n10663' href='#n10663'>10663</a> <a id='n10664' href='#n10664'>10664</a> <a id='n10665' href='#n10665'>10665</a> <a id='n10666' href='#n10666'>10666</a> <a id='n10667' href='#n10667'>10667</a> <a id='n10668' href='#n10668'>10668</a> <a id='n10669' href='#n10669'>10669</a> <a id='n10670' href='#n10670'>10670</a> <a id='n10671' href='#n10671'>10671</a> <a id='n10672' href='#n10672'>10672</a> <a id='n10673' href='#n10673'>10673</a> <a id='n10674' href='#n10674'>10674</a> <a id='n10675' href='#n10675'>10675</a> <a id='n10676' href='#n10676'>10676</a> <a id='n10677' href='#n10677'>10677</a> <a id='n10678' href='#n10678'>10678</a> <a id='n10679' href='#n10679'>10679</a> <a id='n10680' href='#n10680'>10680</a> <a id='n10681' href='#n10681'>10681</a> <a id='n10682' href='#n10682'>10682</a> <a id='n10683' href='#n10683'>10683</a> <a id='n10684' href='#n10684'>10684</a> <a id='n10685' href='#n10685'>10685</a> <a id='n10686' href='#n10686'>10686</a> <a id='n10687' href='#n10687'>10687</a> <a id='n10688' href='#n10688'>10688</a> <a id='n10689' href='#n10689'>10689</a> <a id='n10690' href='#n10690'>10690</a> <a id='n10691' href='#n10691'>10691</a> <a id='n10692' href='#n10692'>10692</a> <a id='n10693' href='#n10693'>10693</a> <a id='n10694' href='#n10694'>10694</a> <a id='n10695' href='#n10695'>10695</a> <a id='n10696' href='#n10696'>10696</a> <a id='n10697' href='#n10697'>10697</a> <a id='n10698' href='#n10698'>10698</a> <a id='n10699' href='#n10699'>10699</a> <a id='n10700' href='#n10700'>10700</a> <a id='n10701' href='#n10701'>10701</a> <a id='n10702' href='#n10702'>10702</a> <a id='n10703' href='#n10703'>10703</a> <a id='n10704' href='#n10704'>10704</a> <a id='n10705' href='#n10705'>10705</a> <a id='n10706' href='#n10706'>10706</a> <a id='n10707' href='#n10707'>10707</a> <a id='n10708' href='#n10708'>10708</a> <a id='n10709' href='#n10709'>10709</a> <a id='n10710' href='#n10710'>10710</a> <a id='n10711' href='#n10711'>10711</a> <a id='n10712' href='#n10712'>10712</a> <a id='n10713' href='#n10713'>10713</a> <a id='n10714' href='#n10714'>10714</a> <a id='n10715' href='#n10715'>10715</a> <a id='n10716' href='#n10716'>10716</a> <a id='n10717' href='#n10717'>10717</a> <a id='n10718' href='#n10718'>10718</a> <a id='n10719' href='#n10719'>10719</a> <a id='n10720' href='#n10720'>10720</a> <a id='n10721' href='#n10721'>10721</a> <a id='n10722' href='#n10722'>10722</a> <a id='n10723' href='#n10723'>10723</a> <a id='n10724' href='#n10724'>10724</a> <a id='n10725' href='#n10725'>10725</a> <a id='n10726' href='#n10726'>10726</a> <a id='n10727' href='#n10727'>10727</a> <a id='n10728' href='#n10728'>10728</a> <a id='n10729' href='#n10729'>10729</a> <a id='n10730' href='#n10730'>10730</a> <a id='n10731' href='#n10731'>10731</a> <a id='n10732' href='#n10732'>10732</a> <a id='n10733' href='#n10733'>10733</a> <a id='n10734' href='#n10734'>10734</a> <a id='n10735' href='#n10735'>10735</a> <a id='n10736' href='#n10736'>10736</a> <a id='n10737' href='#n10737'>10737</a> <a id='n10738' href='#n10738'>10738</a> <a id='n10739' href='#n10739'>10739</a> <a id='n10740' href='#n10740'>10740</a> <a id='n10741' href='#n10741'>10741</a> <a id='n10742' href='#n10742'>10742</a> <a id='n10743' href='#n10743'>10743</a> <a id='n10744' href='#n10744'>10744</a> <a id='n10745' href='#n10745'>10745</a> <a id='n10746' href='#n10746'>10746</a> <a id='n10747' href='#n10747'>10747</a> <a id='n10748' href='#n10748'>10748</a> <a id='n10749' href='#n10749'>10749</a> <a id='n10750' href='#n10750'>10750</a> <a id='n10751' href='#n10751'>10751</a> <a id='n10752' href='#n10752'>10752</a> <a id='n10753' href='#n10753'>10753</a> <a id='n10754' href='#n10754'>10754</a> <a id='n10755' href='#n10755'>10755</a> <a id='n10756' href='#n10756'>10756</a> <a id='n10757' href='#n10757'>10757</a> <a id='n10758' href='#n10758'>10758</a> <a id='n10759' href='#n10759'>10759</a> <a id='n10760' href='#n10760'>10760</a> <a id='n10761' href='#n10761'>10761</a> <a id='n10762' href='#n10762'>10762</a> <a id='n10763' href='#n10763'>10763</a> <a id='n10764' href='#n10764'>10764</a> <a id='n10765' href='#n10765'>10765</a> <a id='n10766' href='#n10766'>10766</a> <a id='n10767' href='#n10767'>10767</a> <a id='n10768' href='#n10768'>10768</a> <a id='n10769' href='#n10769'>10769</a> <a id='n10770' href='#n10770'>10770</a> <a id='n10771' href='#n10771'>10771</a> <a id='n10772' href='#n10772'>10772</a> <a id='n10773' href='#n10773'>10773</a> <a id='n10774' href='#n10774'>10774</a> <a id='n10775' href='#n10775'>10775</a> <a id='n10776' href='#n10776'>10776</a> <a id='n10777' href='#n10777'>10777</a> <a id='n10778' href='#n10778'>10778</a> <a id='n10779' href='#n10779'>10779</a> <a id='n10780' href='#n10780'>10780</a> <a id='n10781' href='#n10781'>10781</a> <a id='n10782' href='#n10782'>10782</a> <a id='n10783' href='#n10783'>10783</a> <a id='n10784' href='#n10784'>10784</a> <a id='n10785' href='#n10785'>10785</a> <a id='n10786' href='#n10786'>10786</a> <a id='n10787' href='#n10787'>10787</a> <a id='n10788' href='#n10788'>10788</a> <a id='n10789' href='#n10789'>10789</a> <a id='n10790' href='#n10790'>10790</a> <a id='n10791' href='#n10791'>10791</a> <a id='n10792' href='#n10792'>10792</a> <a id='n10793' href='#n10793'>10793</a> <a id='n10794' href='#n10794'>10794</a> <a id='n10795' href='#n10795'>10795</a> <a id='n10796' href='#n10796'>10796</a> <a id='n10797' href='#n10797'>10797</a> <a id='n10798' href='#n10798'>10798</a> <a id='n10799' href='#n10799'>10799</a> <a id='n10800' href='#n10800'>10800</a> <a id='n10801' href='#n10801'>10801</a> <a id='n10802' href='#n10802'>10802</a> <a id='n10803' href='#n10803'>10803</a> <a id='n10804' href='#n10804'>10804</a> <a id='n10805' href='#n10805'>10805</a> <a id='n10806' href='#n10806'>10806</a> <a id='n10807' href='#n10807'>10807</a> <a id='n10808' href='#n10808'>10808</a> <a id='n10809' href='#n10809'>10809</a> <a id='n10810' href='#n10810'>10810</a> <a id='n10811' href='#n10811'>10811</a> <a id='n10812' href='#n10812'>10812</a> <a id='n10813' href='#n10813'>10813</a> <a id='n10814' href='#n10814'>10814</a> <a id='n10815' href='#n10815'>10815</a> <a id='n10816' href='#n10816'>10816</a> <a id='n10817' href='#n10817'>10817</a> <a id='n10818' href='#n10818'>10818</a> <a id='n10819' href='#n10819'>10819</a> <a id='n10820' href='#n10820'>10820</a> <a id='n10821' href='#n10821'>10821</a> <a id='n10822' href='#n10822'>10822</a> <a id='n10823' href='#n10823'>10823</a> <a id='n10824' href='#n10824'>10824</a> <a id='n10825' href='#n10825'>10825</a> <a id='n10826' href='#n10826'>10826</a> <a id='n10827' href='#n10827'>10827</a> <a id='n10828' href='#n10828'>10828</a> <a id='n10829' href='#n10829'>10829</a> <a id='n10830' href='#n10830'>10830</a> <a id='n10831' href='#n10831'>10831</a> <a id='n10832' href='#n10832'>10832</a> <a id='n10833' href='#n10833'>10833</a> <a id='n10834' href='#n10834'>10834</a> <a id='n10835' href='#n10835'>10835</a> <a id='n10836' href='#n10836'>10836</a> <a id='n10837' href='#n10837'>10837</a> <a id='n10838' href='#n10838'>10838</a> <a id='n10839' href='#n10839'>10839</a> <a id='n10840' href='#n10840'>10840</a> <a id='n10841' href='#n10841'>10841</a> <a id='n10842' href='#n10842'>10842</a> <a id='n10843' href='#n10843'>10843</a> <a id='n10844' href='#n10844'>10844</a> <a id='n10845' href='#n10845'>10845</a> <a id='n10846' href='#n10846'>10846</a> <a id='n10847' href='#n10847'>10847</a> <a id='n10848' href='#n10848'>10848</a> <a id='n10849' href='#n10849'>10849</a> <a id='n10850' href='#n10850'>10850</a> <a id='n10851' href='#n10851'>10851</a> <a id='n10852' href='#n10852'>10852</a> <a id='n10853' href='#n10853'>10853</a> <a id='n10854' href='#n10854'>10854</a> <a id='n10855' href='#n10855'>10855</a> <a id='n10856' href='#n10856'>10856</a> <a id='n10857' href='#n10857'>10857</a> <a id='n10858' href='#n10858'>10858</a> <a id='n10859' href='#n10859'>10859</a> <a id='n10860' href='#n10860'>10860</a> <a id='n10861' href='#n10861'>10861</a> <a id='n10862' href='#n10862'>10862</a> <a id='n10863' href='#n10863'>10863</a> <a id='n10864' href='#n10864'>10864</a> <a id='n10865' href='#n10865'>10865</a> <a id='n10866' href='#n10866'>10866</a> <a id='n10867' href='#n10867'>10867</a> <a id='n10868' href='#n10868'>10868</a> <a id='n10869' href='#n10869'>10869</a> <a id='n10870' href='#n10870'>10870</a> <a id='n10871' href='#n10871'>10871</a> <a id='n10872' href='#n10872'>10872</a> <a id='n10873' href='#n10873'>10873</a> <a id='n10874' href='#n10874'>10874</a> <a id='n10875' href='#n10875'>10875</a> <a id='n10876' href='#n10876'>10876</a> <a id='n10877' href='#n10877'>10877</a> <a id='n10878' href='#n10878'>10878</a> <a id='n10879' href='#n10879'>10879</a> <a id='n10880' href='#n10880'>10880</a> <a id='n10881' href='#n10881'>10881</a> <a id='n10882' href='#n10882'>10882</a> <a id='n10883' href='#n10883'>10883</a> <a id='n10884' href='#n10884'>10884</a> <a id='n10885' href='#n10885'>10885</a> <a id='n10886' href='#n10886'>10886</a> <a id='n10887' href='#n10887'>10887</a> <a id='n10888' href='#n10888'>10888</a> <a id='n10889' href='#n10889'>10889</a> <a id='n10890' href='#n10890'>10890</a> <a id='n10891' href='#n10891'>10891</a> <a id='n10892' href='#n10892'>10892</a> <a id='n10893' href='#n10893'>10893</a> <a id='n10894' href='#n10894'>10894</a> <a id='n10895' href='#n10895'>10895</a> <a id='n10896' href='#n10896'>10896</a> <a id='n10897' href='#n10897'>10897</a> <a id='n10898' href='#n10898'>10898</a> <a id='n10899' href='#n10899'>10899</a> <a id='n10900' href='#n10900'>10900</a> <a id='n10901' href='#n10901'>10901</a> <a id='n10902' href='#n10902'>10902</a> <a id='n10903' href='#n10903'>10903</a> <a id='n10904' href='#n10904'>10904</a> <a id='n10905' href='#n10905'>10905</a> <a id='n10906' href='#n10906'>10906</a> <a id='n10907' href='#n10907'>10907</a> <a id='n10908' href='#n10908'>10908</a> <a id='n10909' href='#n10909'>10909</a> <a id='n10910' href='#n10910'>10910</a> <a id='n10911' href='#n10911'>10911</a> <a id='n10912' href='#n10912'>10912</a> <a id='n10913' href='#n10913'>10913</a> <a id='n10914' href='#n10914'>10914</a> <a id='n10915' href='#n10915'>10915</a> <a id='n10916' href='#n10916'>10916</a> <a id='n10917' href='#n10917'>10917</a> <a id='n10918' href='#n10918'>10918</a> <a id='n10919' href='#n10919'>10919</a> <a id='n10920' href='#n10920'>10920</a> <a id='n10921' href='#n10921'>10921</a> <a id='n10922' href='#n10922'>10922</a> <a id='n10923' href='#n10923'>10923</a> <a id='n10924' href='#n10924'>10924</a> <a id='n10925' href='#n10925'>10925</a> <a id='n10926' href='#n10926'>10926</a> <a id='n10927' href='#n10927'>10927</a> <a id='n10928' href='#n10928'>10928</a> <a id='n10929' href='#n10929'>10929</a> <a id='n10930' href='#n10930'>10930</a> <a id='n10931' href='#n10931'>10931</a> <a id='n10932' href='#n10932'>10932</a> <a id='n10933' href='#n10933'>10933</a> <a id='n10934' href='#n10934'>10934</a> <a id='n10935' href='#n10935'>10935</a> <a id='n10936' href='#n10936'>10936</a> <a id='n10937' href='#n10937'>10937</a> <a id='n10938' href='#n10938'>10938</a> <a id='n10939' href='#n10939'>10939</a> <a id='n10940' href='#n10940'>10940</a> <a id='n10941' href='#n10941'>10941</a> <a id='n10942' href='#n10942'>10942</a> <a id='n10943' href='#n10943'>10943</a> <a id='n10944' href='#n10944'>10944</a> <a id='n10945' href='#n10945'>10945</a> <a id='n10946' href='#n10946'>10946</a> <a id='n10947' href='#n10947'>10947</a> <a id='n10948' href='#n10948'>10948</a> <a id='n10949' href='#n10949'>10949</a> <a id='n10950' href='#n10950'>10950</a> <a id='n10951' href='#n10951'>10951</a> <a id='n10952' href='#n10952'>10952</a> <a id='n10953' href='#n10953'>10953</a> <a id='n10954' href='#n10954'>10954</a> <a id='n10955' href='#n10955'>10955</a> <a id='n10956' href='#n10956'>10956</a> <a id='n10957' href='#n10957'>10957</a> <a id='n10958' href='#n10958'>10958</a> <a id='n10959' href='#n10959'>10959</a> <a id='n10960' href='#n10960'>10960</a> <a id='n10961' href='#n10961'>10961</a> <a id='n10962' href='#n10962'>10962</a> <a id='n10963' href='#n10963'>10963</a> <a id='n10964' href='#n10964'>10964</a> <a id='n10965' href='#n10965'>10965</a> <a id='n10966' href='#n10966'>10966</a> <a id='n10967' href='#n10967'>10967</a> <a id='n10968' href='#n10968'>10968</a> <a id='n10969' href='#n10969'>10969</a> <a id='n10970' href='#n10970'>10970</a> <a id='n10971' href='#n10971'>10971</a> <a id='n10972' href='#n10972'>10972</a> <a id='n10973' href='#n10973'>10973</a> <a id='n10974' href='#n10974'>10974</a> <a id='n10975' href='#n10975'>10975</a> <a id='n10976' href='#n10976'>10976</a> <a id='n10977' href='#n10977'>10977</a> <a id='n10978' href='#n10978'>10978</a> <a id='n10979' href='#n10979'>10979</a> <a id='n10980' href='#n10980'>10980</a> <a id='n10981' href='#n10981'>10981</a> <a id='n10982' href='#n10982'>10982</a> <a id='n10983' href='#n10983'>10983</a> <a id='n10984' href='#n10984'>10984</a> <a id='n10985' href='#n10985'>10985</a> <a id='n10986' href='#n10986'>10986</a> <a id='n10987' href='#n10987'>10987</a> <a id='n10988' href='#n10988'>10988</a> <a id='n10989' href='#n10989'>10989</a> <a id='n10990' href='#n10990'>10990</a> <a id='n10991' href='#n10991'>10991</a> <a id='n10992' href='#n10992'>10992</a> <a id='n10993' href='#n10993'>10993</a> <a id='n10994' href='#n10994'>10994</a> <a id='n10995' href='#n10995'>10995</a> <a id='n10996' href='#n10996'>10996</a> <a id='n10997' href='#n10997'>10997</a> <a id='n10998' href='#n10998'>10998</a> <a id='n10999' href='#n10999'>10999</a> <a id='n11000' href='#n11000'>11000</a> <a id='n11001' href='#n11001'>11001</a> <a id='n11002' href='#n11002'>11002</a> <a id='n11003' href='#n11003'>11003</a> <a id='n11004' href='#n11004'>11004</a> <a id='n11005' href='#n11005'>11005</a> <a id='n11006' href='#n11006'>11006</a> <a id='n11007' href='#n11007'>11007</a> <a id='n11008' href='#n11008'>11008</a> <a id='n11009' href='#n11009'>11009</a> <a id='n11010' href='#n11010'>11010</a> <a id='n11011' href='#n11011'>11011</a> <a id='n11012' href='#n11012'>11012</a> <a id='n11013' href='#n11013'>11013</a> <a id='n11014' href='#n11014'>11014</a> <a id='n11015' href='#n11015'>11015</a> <a id='n11016' href='#n11016'>11016</a> <a id='n11017' href='#n11017'>11017</a> <a id='n11018' href='#n11018'>11018</a> <a id='n11019' href='#n11019'>11019</a> <a id='n11020' href='#n11020'>11020</a> <a id='n11021' href='#n11021'>11021</a> <a id='n11022' href='#n11022'>11022</a> <a id='n11023' href='#n11023'>11023</a> <a id='n11024' href='#n11024'>11024</a> <a id='n11025' href='#n11025'>11025</a> <a id='n11026' href='#n11026'>11026</a> <a id='n11027' href='#n11027'>11027</a> <a id='n11028' href='#n11028'>11028</a> <a id='n11029' href='#n11029'>11029</a> <a id='n11030' href='#n11030'>11030</a> <a id='n11031' href='#n11031'>11031</a> <a id='n11032' href='#n11032'>11032</a> <a id='n11033' href='#n11033'>11033</a> <a id='n11034' href='#n11034'>11034</a> <a id='n11035' href='#n11035'>11035</a> <a id='n11036' href='#n11036'>11036</a> <a id='n11037' href='#n11037'>11037</a> <a id='n11038' href='#n11038'>11038</a> <a id='n11039' href='#n11039'>11039</a> <a id='n11040' href='#n11040'>11040</a> <a id='n11041' href='#n11041'>11041</a> <a id='n11042' href='#n11042'>11042</a> <a id='n11043' href='#n11043'>11043</a> <a id='n11044' href='#n11044'>11044</a> <a id='n11045' href='#n11045'>11045</a> <a id='n11046' href='#n11046'>11046</a> <a id='n11047' href='#n11047'>11047</a> <a id='n11048' href='#n11048'>11048</a> <a id='n11049' href='#n11049'>11049</a> <a id='n11050' href='#n11050'>11050</a> <a id='n11051' href='#n11051'>11051</a> <a id='n11052' href='#n11052'>11052</a> <a id='n11053' href='#n11053'>11053</a> <a id='n11054' href='#n11054'>11054</a> <a id='n11055' href='#n11055'>11055</a> <a id='n11056' href='#n11056'>11056</a> <a id='n11057' href='#n11057'>11057</a> <a id='n11058' href='#n11058'>11058</a> <a id='n11059' href='#n11059'>11059</a> <a id='n11060' href='#n11060'>11060</a> <a id='n11061' href='#n11061'>11061</a> <a id='n11062' href='#n11062'>11062</a> <a id='n11063' href='#n11063'>11063</a> <a id='n11064' href='#n11064'>11064</a> <a id='n11065' href='#n11065'>11065</a> <a id='n11066' href='#n11066'>11066</a> <a id='n11067' href='#n11067'>11067</a> <a id='n11068' href='#n11068'>11068</a> <a id='n11069' href='#n11069'>11069</a> <a id='n11070' href='#n11070'>11070</a> <a id='n11071' href='#n11071'>11071</a> <a id='n11072' href='#n11072'>11072</a> <a id='n11073' href='#n11073'>11073</a> <a id='n11074' href='#n11074'>11074</a> <a id='n11075' href='#n11075'>11075</a> <a id='n11076' href='#n11076'>11076</a> <a id='n11077' href='#n11077'>11077</a> <a id='n11078' href='#n11078'>11078</a> <a id='n11079' href='#n11079'>11079</a> <a id='n11080' href='#n11080'>11080</a> <a id='n11081' href='#n11081'>11081</a> <a id='n11082' href='#n11082'>11082</a> <a id='n11083' href='#n11083'>11083</a> <a id='n11084' href='#n11084'>11084</a> <a id='n11085' href='#n11085'>11085</a> <a id='n11086' href='#n11086'>11086</a> <a id='n11087' href='#n11087'>11087</a> <a id='n11088' href='#n11088'>11088</a> <a id='n11089' href='#n11089'>11089</a> <a id='n11090' href='#n11090'>11090</a> <a id='n11091' href='#n11091'>11091</a> <a id='n11092' href='#n11092'>11092</a> <a id='n11093' href='#n11093'>11093</a> <a id='n11094' href='#n11094'>11094</a> <a id='n11095' href='#n11095'>11095</a> <a id='n11096' href='#n11096'>11096</a> <a id='n11097' href='#n11097'>11097</a> <a id='n11098' href='#n11098'>11098</a> <a id='n11099' href='#n11099'>11099</a> <a id='n11100' href='#n11100'>11100</a> <a id='n11101' href='#n11101'>11101</a> <a id='n11102' href='#n11102'>11102</a> <a id='n11103' href='#n11103'>11103</a> <a id='n11104' href='#n11104'>11104</a> <a id='n11105' href='#n11105'>11105</a> <a id='n11106' href='#n11106'>11106</a> <a id='n11107' href='#n11107'>11107</a> <a id='n11108' href='#n11108'>11108</a> <a id='n11109' href='#n11109'>11109</a> <a id='n11110' href='#n11110'>11110</a> <a id='n11111' href='#n11111'>11111</a> <a id='n11112' href='#n11112'>11112</a> <a id='n11113' href='#n11113'>11113</a> <a id='n11114' href='#n11114'>11114</a> <a id='n11115' href='#n11115'>11115</a> <a id='n11116' href='#n11116'>11116</a> <a id='n11117' href='#n11117'>11117</a> <a id='n11118' href='#n11118'>11118</a> <a id='n11119' href='#n11119'>11119</a> <a id='n11120' href='#n11120'>11120</a> <a id='n11121' href='#n11121'>11121</a> <a id='n11122' href='#n11122'>11122</a> <a id='n11123' href='#n11123'>11123</a> <a id='n11124' href='#n11124'>11124</a> <a id='n11125' href='#n11125'>11125</a> <a id='n11126' href='#n11126'>11126</a> <a id='n11127' href='#n11127'>11127</a> <a id='n11128' href='#n11128'>11128</a> <a id='n11129' href='#n11129'>11129</a> <a id='n11130' href='#n11130'>11130</a> <a id='n11131' href='#n11131'>11131</a> <a id='n11132' href='#n11132'>11132</a> <a id='n11133' href='#n11133'>11133</a> <a id='n11134' href='#n11134'>11134</a> <a id='n11135' href='#n11135'>11135</a> <a id='n11136' href='#n11136'>11136</a> <a id='n11137' href='#n11137'>11137</a> <a id='n11138' href='#n11138'>11138</a> <a id='n11139' href='#n11139'>11139</a> <a id='n11140' href='#n11140'>11140</a> <a id='n11141' href='#n11141'>11141</a> <a id='n11142' href='#n11142'>11142</a> <a id='n11143' href='#n11143'>11143</a> <a id='n11144' href='#n11144'>11144</a> <a id='n11145' href='#n11145'>11145</a> <a id='n11146' href='#n11146'>11146</a> <a id='n11147' href='#n11147'>11147</a> <a id='n11148' href='#n11148'>11148</a> <a id='n11149' href='#n11149'>11149</a> <a id='n11150' href='#n11150'>11150</a> <a id='n11151' href='#n11151'>11151</a> <a id='n11152' href='#n11152'>11152</a> <a id='n11153' href='#n11153'>11153</a> <a id='n11154' href='#n11154'>11154</a> <a id='n11155' href='#n11155'>11155</a> <a id='n11156' href='#n11156'>11156</a> <a id='n11157' href='#n11157'>11157</a> <a id='n11158' href='#n11158'>11158</a> <a id='n11159' href='#n11159'>11159</a> <a id='n11160' href='#n11160'>11160</a> <a id='n11161' href='#n11161'>11161</a> <a id='n11162' href='#n11162'>11162</a> <a id='n11163' href='#n11163'>11163</a> <a id='n11164' href='#n11164'>11164</a> <a id='n11165' href='#n11165'>11165</a> <a id='n11166' href='#n11166'>11166</a> <a id='n11167' href='#n11167'>11167</a> <a id='n11168' href='#n11168'>11168</a> <a id='n11169' href='#n11169'>11169</a> <a id='n11170' href='#n11170'>11170</a> <a id='n11171' href='#n11171'>11171</a> <a id='n11172' href='#n11172'>11172</a> <a id='n11173' href='#n11173'>11173</a> <a id='n11174' href='#n11174'>11174</a> <a id='n11175' href='#n11175'>11175</a> <a id='n11176' href='#n11176'>11176</a> <a id='n11177' href='#n11177'>11177</a> <a id='n11178' href='#n11178'>11178</a> <a id='n11179' href='#n11179'>11179</a> <a id='n11180' href='#n11180'>11180</a> <a id='n11181' href='#n11181'>11181</a> <a id='n11182' href='#n11182'>11182</a> <a id='n11183' href='#n11183'>11183</a> <a id='n11184' href='#n11184'>11184</a> <a id='n11185' href='#n11185'>11185</a> <a id='n11186' href='#n11186'>11186</a> <a id='n11187' href='#n11187'>11187</a> <a id='n11188' href='#n11188'>11188</a> <a id='n11189' href='#n11189'>11189</a> <a id='n11190' href='#n11190'>11190</a> <a id='n11191' href='#n11191'>11191</a> <a id='n11192' href='#n11192'>11192</a> <a id='n11193' href='#n11193'>11193</a> <a id='n11194' href='#n11194'>11194</a> <a id='n11195' href='#n11195'>11195</a> <a id='n11196' href='#n11196'>11196</a> <a id='n11197' href='#n11197'>11197</a> <a id='n11198' href='#n11198'>11198</a> <a id='n11199' href='#n11199'>11199</a> <a id='n11200' href='#n11200'>11200</a> <a id='n11201' href='#n11201'>11201</a> <a id='n11202' href='#n11202'>11202</a> <a id='n11203' href='#n11203'>11203</a> <a id='n11204' href='#n11204'>11204</a> <a id='n11205' href='#n11205'>11205</a> <a id='n11206' href='#n11206'>11206</a> <a id='n11207' href='#n11207'>11207</a> <a id='n11208' href='#n11208'>11208</a> <a id='n11209' href='#n11209'>11209</a> <a id='n11210' href='#n11210'>11210</a> <a id='n11211' href='#n11211'>11211</a> <a id='n11212' href='#n11212'>11212</a> <a id='n11213' href='#n11213'>11213</a> <a id='n11214' href='#n11214'>11214</a> <a id='n11215' href='#n11215'>11215</a> <a id='n11216' href='#n11216'>11216</a> <a id='n11217' href='#n11217'>11217</a> <a id='n11218' href='#n11218'>11218</a> <a id='n11219' href='#n11219'>11219</a> <a id='n11220' href='#n11220'>11220</a> <a id='n11221' href='#n11221'>11221</a> <a id='n11222' href='#n11222'>11222</a> <a id='n11223' href='#n11223'>11223</a> <a id='n11224' href='#n11224'>11224</a> <a id='n11225' href='#n11225'>11225</a> <a id='n11226' href='#n11226'>11226</a> <a id='n11227' href='#n11227'>11227</a> <a id='n11228' href='#n11228'>11228</a> <a id='n11229' href='#n11229'>11229</a> <a id='n11230' href='#n11230'>11230</a> <a id='n11231' href='#n11231'>11231</a> <a id='n11232' href='#n11232'>11232</a> <a id='n11233' href='#n11233'>11233</a> <a id='n11234' href='#n11234'>11234</a> <a id='n11235' href='#n11235'>11235</a> <a id='n11236' href='#n11236'>11236</a> <a id='n11237' href='#n11237'>11237</a> <a id='n11238' href='#n11238'>11238</a> <a id='n11239' href='#n11239'>11239</a> <a id='n11240' href='#n11240'>11240</a> <a id='n11241' href='#n11241'>11241</a> <a id='n11242' href='#n11242'>11242</a> <a id='n11243' href='#n11243'>11243</a> <a id='n11244' href='#n11244'>11244</a> <a id='n11245' href='#n11245'>11245</a> <a id='n11246' href='#n11246'>11246</a> <a id='n11247' href='#n11247'>11247</a> <a id='n11248' href='#n11248'>11248</a> <a id='n11249' href='#n11249'>11249</a> <a id='n11250' href='#n11250'>11250</a> <a id='n11251' href='#n11251'>11251</a> <a id='n11252' href='#n11252'>11252</a> <a id='n11253' href='#n11253'>11253</a> <a id='n11254' href='#n11254'>11254</a> <a id='n11255' href='#n11255'>11255</a> <a id='n11256' href='#n11256'>11256</a> <a id='n11257' href='#n11257'>11257</a> <a id='n11258' href='#n11258'>11258</a> <a id='n11259' href='#n11259'>11259</a> <a id='n11260' href='#n11260'>11260</a> <a id='n11261' href='#n11261'>11261</a> <a id='n11262' href='#n11262'>11262</a> <a id='n11263' href='#n11263'>11263</a> <a id='n11264' href='#n11264'>11264</a> <a id='n11265' href='#n11265'>11265</a> <a id='n11266' href='#n11266'>11266</a> <a id='n11267' href='#n11267'>11267</a> <a id='n11268' href='#n11268'>11268</a> <a id='n11269' href='#n11269'>11269</a> <a id='n11270' href='#n11270'>11270</a> <a id='n11271' href='#n11271'>11271</a> <a id='n11272' href='#n11272'>11272</a> <a id='n11273' href='#n11273'>11273</a> <a id='n11274' href='#n11274'>11274</a> <a id='n11275' href='#n11275'>11275</a> <a id='n11276' href='#n11276'>11276</a> <a id='n11277' href='#n11277'>11277</a> <a id='n11278' href='#n11278'>11278</a> <a id='n11279' href='#n11279'>11279</a> <a id='n11280' href='#n11280'>11280</a> <a id='n11281' href='#n11281'>11281</a> <a id='n11282' href='#n11282'>11282</a> <a id='n11283' href='#n11283'>11283</a> <a id='n11284' href='#n11284'>11284</a> <a id='n11285' href='#n11285'>11285</a> <a id='n11286' href='#n11286'>11286</a> <a id='n11287' href='#n11287'>11287</a> <a id='n11288' href='#n11288'>11288</a> <a id='n11289' href='#n11289'>11289</a> <a id='n11290' href='#n11290'>11290</a> <a id='n11291' href='#n11291'>11291</a> <a id='n11292' href='#n11292'>11292</a> <a id='n11293' href='#n11293'>11293</a> <a id='n11294' href='#n11294'>11294</a> <a id='n11295' href='#n11295'>11295</a> <a id='n11296' href='#n11296'>11296</a> <a id='n11297' href='#n11297'>11297</a> <a id='n11298' href='#n11298'>11298</a> <a id='n11299' href='#n11299'>11299</a> <a id='n11300' href='#n11300'>11300</a> <a id='n11301' href='#n11301'>11301</a> <a id='n11302' href='#n11302'>11302</a> <a id='n11303' href='#n11303'>11303</a> <a id='n11304' href='#n11304'>11304</a> <a id='n11305' href='#n11305'>11305</a> <a id='n11306' href='#n11306'>11306</a> <a id='n11307' href='#n11307'>11307</a> <a id='n11308' href='#n11308'>11308</a> <a id='n11309' href='#n11309'>11309</a> <a id='n11310' href='#n11310'>11310</a> <a id='n11311' href='#n11311'>11311</a> <a id='n11312' href='#n11312'>11312</a> <a id='n11313' href='#n11313'>11313</a> <a id='n11314' href='#n11314'>11314</a> <a id='n11315' href='#n11315'>11315</a> <a id='n11316' href='#n11316'>11316</a> <a id='n11317' href='#n11317'>11317</a> <a id='n11318' href='#n11318'>11318</a> <a id='n11319' href='#n11319'>11319</a> <a id='n11320' href='#n11320'>11320</a> <a id='n11321' href='#n11321'>11321</a> <a id='n11322' href='#n11322'>11322</a> <a id='n11323' href='#n11323'>11323</a> <a id='n11324' href='#n11324'>11324</a> <a id='n11325' href='#n11325'>11325</a> <a id='n11326' href='#n11326'>11326</a> <a id='n11327' href='#n11327'>11327</a> <a id='n11328' href='#n11328'>11328</a> <a id='n11329' href='#n11329'>11329</a> <a id='n11330' href='#n11330'>11330</a> <a id='n11331' href='#n11331'>11331</a> <a id='n11332' href='#n11332'>11332</a> <a id='n11333' href='#n11333'>11333</a> <a id='n11334' href='#n11334'>11334</a> <a id='n11335' href='#n11335'>11335</a> <a id='n11336' href='#n11336'>11336</a> <a id='n11337' href='#n11337'>11337</a> <a id='n11338' href='#n11338'>11338</a> <a id='n11339' href='#n11339'>11339</a> <a id='n11340' href='#n11340'>11340</a> <a id='n11341' href='#n11341'>11341</a> <a id='n11342' href='#n11342'>11342</a> <a id='n11343' href='#n11343'>11343</a> <a id='n11344' href='#n11344'>11344</a> <a id='n11345' href='#n11345'>11345</a> <a id='n11346' href='#n11346'>11346</a> <a id='n11347' href='#n11347'>11347</a> <a id='n11348' href='#n11348'>11348</a> <a id='n11349' href='#n11349'>11349</a> <a id='n11350' href='#n11350'>11350</a> <a id='n11351' href='#n11351'>11351</a> <a id='n11352' href='#n11352'>11352</a> <a id='n11353' href='#n11353'>11353</a> <a id='n11354' href='#n11354'>11354</a> <a id='n11355' href='#n11355'>11355</a> <a id='n11356' href='#n11356'>11356</a> <a id='n11357' href='#n11357'>11357</a> <a id='n11358' href='#n11358'>11358</a> <a id='n11359' href='#n11359'>11359</a> <a id='n11360' href='#n11360'>11360</a> <a id='n11361' href='#n11361'>11361</a> <a id='n11362' href='#n11362'>11362</a> <a id='n11363' href='#n11363'>11363</a> <a id='n11364' href='#n11364'>11364</a> <a id='n11365' href='#n11365'>11365</a> <a id='n11366' href='#n11366'>11366</a> <a id='n11367' href='#n11367'>11367</a> <a id='n11368' href='#n11368'>11368</a> <a id='n11369' href='#n11369'>11369</a> <a id='n11370' href='#n11370'>11370</a> <a id='n11371' href='#n11371'>11371</a> <a id='n11372' href='#n11372'>11372</a> <a id='n11373' href='#n11373'>11373</a> <a id='n11374' href='#n11374'>11374</a> <a id='n11375' href='#n11375'>11375</a> <a id='n11376' href='#n11376'>11376</a> <a id='n11377' href='#n11377'>11377</a> <a id='n11378' href='#n11378'>11378</a> <a id='n11379' href='#n11379'>11379</a> <a id='n11380' href='#n11380'>11380</a> <a id='n11381' href='#n11381'>11381</a> <a id='n11382' href='#n11382'>11382</a> <a id='n11383' href='#n11383'>11383</a> <a id='n11384' href='#n11384'>11384</a> <a id='n11385' href='#n11385'>11385</a> <a id='n11386' href='#n11386'>11386</a> <a id='n11387' href='#n11387'>11387</a> <a id='n11388' href='#n11388'>11388</a> <a id='n11389' href='#n11389'>11389</a> <a id='n11390' href='#n11390'>11390</a> <a id='n11391' href='#n11391'>11391</a> <a id='n11392' href='#n11392'>11392</a> <a id='n11393' href='#n11393'>11393</a> <a id='n11394' href='#n11394'>11394</a> <a id='n11395' href='#n11395'>11395</a> <a id='n11396' href='#n11396'>11396</a> <a id='n11397' href='#n11397'>11397</a> <a id='n11398' href='#n11398'>11398</a> <a id='n11399' href='#n11399'>11399</a> <a id='n11400' href='#n11400'>11400</a> <a id='n11401' href='#n11401'>11401</a> <a id='n11402' href='#n11402'>11402</a> <a id='n11403' href='#n11403'>11403</a> <a id='n11404' href='#n11404'>11404</a> <a id='n11405' href='#n11405'>11405</a> <a id='n11406' href='#n11406'>11406</a> <a id='n11407' href='#n11407'>11407</a> <a id='n11408' href='#n11408'>11408</a> <a id='n11409' href='#n11409'>11409</a> <a id='n11410' href='#n11410'>11410</a> <a id='n11411' href='#n11411'>11411</a> <a id='n11412' href='#n11412'>11412</a> <a id='n11413' href='#n11413'>11413</a> <a id='n11414' href='#n11414'>11414</a> <a id='n11415' href='#n11415'>11415</a> <a id='n11416' href='#n11416'>11416</a> <a id='n11417' href='#n11417'>11417</a> <a id='n11418' href='#n11418'>11418</a> <a id='n11419' href='#n11419'>11419</a> <a id='n11420' href='#n11420'>11420</a> <a id='n11421' href='#n11421'>11421</a> <a id='n11422' href='#n11422'>11422</a> <a id='n11423' href='#n11423'>11423</a> <a id='n11424' href='#n11424'>11424</a> <a id='n11425' href='#n11425'>11425</a> <a id='n11426' href='#n11426'>11426</a> <a id='n11427' href='#n11427'>11427</a> <a id='n11428' href='#n11428'>11428</a> <a id='n11429' href='#n11429'>11429</a> <a id='n11430' href='#n11430'>11430</a> <a id='n11431' href='#n11431'>11431</a> <a id='n11432' href='#n11432'>11432</a> <a id='n11433' href='#n11433'>11433</a> <a id='n11434' href='#n11434'>11434</a> <a id='n11435' href='#n11435'>11435</a> <a id='n11436' href='#n11436'>11436</a> <a id='n11437' href='#n11437'>11437</a> <a id='n11438' href='#n11438'>11438</a> <a id='n11439' href='#n11439'>11439</a> <a id='n11440' href='#n11440'>11440</a> <a id='n11441' href='#n11441'>11441</a> <a id='n11442' href='#n11442'>11442</a> <a id='n11443' href='#n11443'>11443</a> <a id='n11444' href='#n11444'>11444</a> <a id='n11445' href='#n11445'>11445</a> <a id='n11446' href='#n11446'>11446</a> <a id='n11447' href='#n11447'>11447</a> <a id='n11448' href='#n11448'>11448</a> <a id='n11449' href='#n11449'>11449</a> <a id='n11450' href='#n11450'>11450</a> <a id='n11451' href='#n11451'>11451</a> <a id='n11452' href='#n11452'>11452</a> <a id='n11453' href='#n11453'>11453</a> <a id='n11454' href='#n11454'>11454</a> <a id='n11455' href='#n11455'>11455</a> <a id='n11456' href='#n11456'>11456</a> <a id='n11457' href='#n11457'>11457</a> <a id='n11458' href='#n11458'>11458</a> <a id='n11459' href='#n11459'>11459</a> <a id='n11460' href='#n11460'>11460</a> <a id='n11461' href='#n11461'>11461</a> <a id='n11462' href='#n11462'>11462</a> <a id='n11463' href='#n11463'>11463</a> <a id='n11464' href='#n11464'>11464</a> <a id='n11465' href='#n11465'>11465</a> <a id='n11466' href='#n11466'>11466</a> <a id='n11467' href='#n11467'>11467</a> <a id='n11468' href='#n11468'>11468</a> <a id='n11469' href='#n11469'>11469</a> <a id='n11470' href='#n11470'>11470</a> <a id='n11471' href='#n11471'>11471</a> <a id='n11472' href='#n11472'>11472</a> <a id='n11473' href='#n11473'>11473</a> <a id='n11474' href='#n11474'>11474</a> <a id='n11475' href='#n11475'>11475</a> <a id='n11476' href='#n11476'>11476</a> <a id='n11477' href='#n11477'>11477</a> <a id='n11478' href='#n11478'>11478</a> <a id='n11479' href='#n11479'>11479</a> <a id='n11480' href='#n11480'>11480</a> <a id='n11481' href='#n11481'>11481</a> <a id='n11482' href='#n11482'>11482</a> <a id='n11483' href='#n11483'>11483</a> <a id='n11484' href='#n11484'>11484</a> <a id='n11485' href='#n11485'>11485</a> <a id='n11486' href='#n11486'>11486</a> <a id='n11487' href='#n11487'>11487</a> <a id='n11488' href='#n11488'>11488</a> <a id='n11489' href='#n11489'>11489</a> <a id='n11490' href='#n11490'>11490</a> <a id='n11491' href='#n11491'>11491</a> <a id='n11492' href='#n11492'>11492</a> <a id='n11493' href='#n11493'>11493</a> <a id='n11494' href='#n11494'>11494</a> <a id='n11495' href='#n11495'>11495</a> <a id='n11496' href='#n11496'>11496</a> <a id='n11497' href='#n11497'>11497</a> <a id='n11498' href='#n11498'>11498</a> <a id='n11499' href='#n11499'>11499</a> <a id='n11500' href='#n11500'>11500</a> <a id='n11501' href='#n11501'>11501</a> <a id='n11502' href='#n11502'>11502</a> <a id='n11503' href='#n11503'>11503</a> <a id='n11504' href='#n11504'>11504</a> <a id='n11505' href='#n11505'>11505</a> <a id='n11506' href='#n11506'>11506</a> <a id='n11507' href='#n11507'>11507</a> <a id='n11508' href='#n11508'>11508</a> <a id='n11509' href='#n11509'>11509</a> <a id='n11510' href='#n11510'>11510</a> <a id='n11511' href='#n11511'>11511</a> <a id='n11512' href='#n11512'>11512</a> <a id='n11513' href='#n11513'>11513</a> <a id='n11514' href='#n11514'>11514</a> <a id='n11515' href='#n11515'>11515</a> <a id='n11516' href='#n11516'>11516</a> <a id='n11517' href='#n11517'>11517</a> <a id='n11518' href='#n11518'>11518</a> <a id='n11519' href='#n11519'>11519</a> <a id='n11520' href='#n11520'>11520</a> <a id='n11521' href='#n11521'>11521</a> <a id='n11522' href='#n11522'>11522</a> <a id='n11523' href='#n11523'>11523</a> <a id='n11524' href='#n11524'>11524</a> <a id='n11525' href='#n11525'>11525</a> <a id='n11526' href='#n11526'>11526</a> <a id='n11527' href='#n11527'>11527</a> <a id='n11528' href='#n11528'>11528</a> <a id='n11529' href='#n11529'>11529</a> <a id='n11530' href='#n11530'>11530</a> <a id='n11531' href='#n11531'>11531</a> <a id='n11532' href='#n11532'>11532</a> <a id='n11533' href='#n11533'>11533</a> <a id='n11534' href='#n11534'>11534</a> <a id='n11535' href='#n11535'>11535</a> <a id='n11536' href='#n11536'>11536</a> <a id='n11537' href='#n11537'>11537</a> <a id='n11538' href='#n11538'>11538</a> <a id='n11539' href='#n11539'>11539</a> <a id='n11540' href='#n11540'>11540</a> <a id='n11541' href='#n11541'>11541</a> <a id='n11542' href='#n11542'>11542</a> <a id='n11543' href='#n11543'>11543</a> <a id='n11544' href='#n11544'>11544</a> <a id='n11545' href='#n11545'>11545</a> <a id='n11546' href='#n11546'>11546</a> <a id='n11547' href='#n11547'>11547</a> <a id='n11548' href='#n11548'>11548</a> <a id='n11549' href='#n11549'>11549</a> <a id='n11550' href='#n11550'>11550</a> <a id='n11551' href='#n11551'>11551</a> <a id='n11552' href='#n11552'>11552</a> <a id='n11553' href='#n11553'>11553</a> <a id='n11554' href='#n11554'>11554</a> <a id='n11555' href='#n11555'>11555</a> <a id='n11556' href='#n11556'>11556</a> <a id='n11557' href='#n11557'>11557</a> <a id='n11558' href='#n11558'>11558</a> <a id='n11559' href='#n11559'>11559</a> <a id='n11560' href='#n11560'>11560</a> <a id='n11561' href='#n11561'>11561</a> <a id='n11562' href='#n11562'>11562</a> <a id='n11563' href='#n11563'>11563</a> <a id='n11564' href='#n11564'>11564</a> <a id='n11565' href='#n11565'>11565</a> <a id='n11566' href='#n11566'>11566</a> <a id='n11567' href='#n11567'>11567</a> <a id='n11568' href='#n11568'>11568</a> <a id='n11569' href='#n11569'>11569</a> <a id='n11570' href='#n11570'>11570</a> <a id='n11571' href='#n11571'>11571</a> <a id='n11572' href='#n11572'>11572</a> <a id='n11573' href='#n11573'>11573</a> <a id='n11574' href='#n11574'>11574</a> <a id='n11575' href='#n11575'>11575</a> <a id='n11576' href='#n11576'>11576</a> <a id='n11577' href='#n11577'>11577</a> <a id='n11578' href='#n11578'>11578</a> <a id='n11579' href='#n11579'>11579</a> <a id='n11580' href='#n11580'>11580</a> <a id='n11581' href='#n11581'>11581</a> <a id='n11582' href='#n11582'>11582</a> <a id='n11583' href='#n11583'>11583</a> <a id='n11584' href='#n11584'>11584</a> <a id='n11585' href='#n11585'>11585</a> <a id='n11586' href='#n11586'>11586</a> <a id='n11587' href='#n11587'>11587</a> <a id='n11588' href='#n11588'>11588</a> <a id='n11589' href='#n11589'>11589</a> <a id='n11590' href='#n11590'>11590</a> <a id='n11591' href='#n11591'>11591</a> <a id='n11592' href='#n11592'>11592</a> <a id='n11593' href='#n11593'>11593</a> <a id='n11594' href='#n11594'>11594</a> <a id='n11595' href='#n11595'>11595</a> <a id='n11596' href='#n11596'>11596</a> <a id='n11597' href='#n11597'>11597</a> <a id='n11598' href='#n11598'>11598</a> <a id='n11599' href='#n11599'>11599</a> <a id='n11600' href='#n11600'>11600</a> <a id='n11601' href='#n11601'>11601</a> <a id='n11602' href='#n11602'>11602</a> <a id='n11603' href='#n11603'>11603</a> <a id='n11604' href='#n11604'>11604</a> <a id='n11605' href='#n11605'>11605</a> <a id='n11606' href='#n11606'>11606</a> <a id='n11607' href='#n11607'>11607</a> <a id='n11608' href='#n11608'>11608</a> <a id='n11609' href='#n11609'>11609</a> <a id='n11610' href='#n11610'>11610</a> <a id='n11611' href='#n11611'>11611</a> <a id='n11612' href='#n11612'>11612</a> <a id='n11613' href='#n11613'>11613</a> <a id='n11614' href='#n11614'>11614</a> <a id='n11615' href='#n11615'>11615</a> <a id='n11616' href='#n11616'>11616</a> <a id='n11617' href='#n11617'>11617</a> <a id='n11618' href='#n11618'>11618</a> <a id='n11619' href='#n11619'>11619</a> <a id='n11620' href='#n11620'>11620</a> <a id='n11621' href='#n11621'>11621</a> <a id='n11622' href='#n11622'>11622</a> <a id='n11623' href='#n11623'>11623</a> <a id='n11624' href='#n11624'>11624</a> <a id='n11625' href='#n11625'>11625</a> <a id='n11626' href='#n11626'>11626</a> <a id='n11627' href='#n11627'>11627</a> <a id='n11628' href='#n11628'>11628</a> <a id='n11629' href='#n11629'>11629</a> <a id='n11630' href='#n11630'>11630</a> <a id='n11631' href='#n11631'>11631</a> <a id='n11632' href='#n11632'>11632</a> <a id='n11633' href='#n11633'>11633</a> <a id='n11634' href='#n11634'>11634</a> <a id='n11635' href='#n11635'>11635</a> <a id='n11636' href='#n11636'>11636</a> <a id='n11637' href='#n11637'>11637</a> <a id='n11638' href='#n11638'>11638</a> <a id='n11639' href='#n11639'>11639</a> <a id='n11640' href='#n11640'>11640</a> <a id='n11641' href='#n11641'>11641</a> <a id='n11642' href='#n11642'>11642</a> <a id='n11643' href='#n11643'>11643</a> <a id='n11644' href='#n11644'>11644</a> <a id='n11645' href='#n11645'>11645</a> <a id='n11646' href='#n11646'>11646</a> <a id='n11647' href='#n11647'>11647</a> <a id='n11648' href='#n11648'>11648</a> <a id='n11649' href='#n11649'>11649</a> <a id='n11650' href='#n11650'>11650</a> <a id='n11651' href='#n11651'>11651</a> <a id='n11652' href='#n11652'>11652</a> <a id='n11653' href='#n11653'>11653</a> <a id='n11654' href='#n11654'>11654</a> <a id='n11655' href='#n11655'>11655</a> <a id='n11656' href='#n11656'>11656</a> <a id='n11657' href='#n11657'>11657</a> <a id='n11658' href='#n11658'>11658</a> <a id='n11659' href='#n11659'>11659</a> <a id='n11660' href='#n11660'>11660</a> <a id='n11661' href='#n11661'>11661</a> <a id='n11662' href='#n11662'>11662</a> <a id='n11663' href='#n11663'>11663</a> <a id='n11664' href='#n11664'>11664</a> <a id='n11665' href='#n11665'>11665</a> <a id='n11666' href='#n11666'>11666</a> <a id='n11667' href='#n11667'>11667</a> <a id='n11668' href='#n11668'>11668</a> <a id='n11669' href='#n11669'>11669</a> <a id='n11670' href='#n11670'>11670</a> <a id='n11671' href='#n11671'>11671</a> <a id='n11672' href='#n11672'>11672</a> <a id='n11673' href='#n11673'>11673</a> <a id='n11674' href='#n11674'>11674</a> <a id='n11675' href='#n11675'>11675</a> <a id='n11676' href='#n11676'>11676</a> <a id='n11677' href='#n11677'>11677</a> <a id='n11678' href='#n11678'>11678</a> <a id='n11679' href='#n11679'>11679</a> <a id='n11680' href='#n11680'>11680</a> <a id='n11681' href='#n11681'>11681</a> <a id='n11682' href='#n11682'>11682</a> <a id='n11683' href='#n11683'>11683</a> <a id='n11684' href='#n11684'>11684</a> <a id='n11685' href='#n11685'>11685</a> <a id='n11686' href='#n11686'>11686</a> <a id='n11687' href='#n11687'>11687</a> <a id='n11688' href='#n11688'>11688</a> <a id='n11689' href='#n11689'>11689</a> <a id='n11690' href='#n11690'>11690</a> <a id='n11691' href='#n11691'>11691</a> <a id='n11692' href='#n11692'>11692</a> <a id='n11693' href='#n11693'>11693</a> <a id='n11694' href='#n11694'>11694</a> <a id='n11695' href='#n11695'>11695</a> <a id='n11696' href='#n11696'>11696</a> <a id='n11697' href='#n11697'>11697</a> <a id='n11698' href='#n11698'>11698</a> <a id='n11699' href='#n11699'>11699</a> <a id='n11700' href='#n11700'>11700</a> <a id='n11701' href='#n11701'>11701</a> <a id='n11702' href='#n11702'>11702</a> <a id='n11703' href='#n11703'>11703</a> <a id='n11704' href='#n11704'>11704</a> <a id='n11705' href='#n11705'>11705</a> <a id='n11706' href='#n11706'>11706</a> <a id='n11707' href='#n11707'>11707</a> <a id='n11708' href='#n11708'>11708</a> <a id='n11709' href='#n11709'>11709</a> <a id='n11710' href='#n11710'>11710</a> <a id='n11711' href='#n11711'>11711</a> <a id='n11712' href='#n11712'>11712</a> <a id='n11713' href='#n11713'>11713</a> <a id='n11714' href='#n11714'>11714</a> <a id='n11715' href='#n11715'>11715</a> <a id='n11716' href='#n11716'>11716</a> <a id='n11717' href='#n11717'>11717</a> <a id='n11718' href='#n11718'>11718</a> <a id='n11719' href='#n11719'>11719</a> <a id='n11720' href='#n11720'>11720</a> <a id='n11721' href='#n11721'>11721</a> <a id='n11722' href='#n11722'>11722</a> <a id='n11723' href='#n11723'>11723</a> <a id='n11724' href='#n11724'>11724</a> <a id='n11725' href='#n11725'>11725</a> <a id='n11726' href='#n11726'>11726</a> <a id='n11727' href='#n11727'>11727</a> <a id='n11728' href='#n11728'>11728</a> <a id='n11729' href='#n11729'>11729</a> <a id='n11730' href='#n11730'>11730</a> <a id='n11731' href='#n11731'>11731</a> <a id='n11732' href='#n11732'>11732</a> <a id='n11733' href='#n11733'>11733</a> <a id='n11734' href='#n11734'>11734</a> <a id='n11735' href='#n11735'>11735</a> <a id='n11736' href='#n11736'>11736</a> <a id='n11737' href='#n11737'>11737</a> <a id='n11738' href='#n11738'>11738</a> <a id='n11739' href='#n11739'>11739</a> <a id='n11740' href='#n11740'>11740</a> <a id='n11741' href='#n11741'>11741</a> <a id='n11742' href='#n11742'>11742</a> <a id='n11743' href='#n11743'>11743</a> <a id='n11744' href='#n11744'>11744</a> <a id='n11745' href='#n11745'>11745</a> <a id='n11746' href='#n11746'>11746</a> <a id='n11747' href='#n11747'>11747</a> <a id='n11748' href='#n11748'>11748</a> <a id='n11749' href='#n11749'>11749</a> <a id='n11750' href='#n11750'>11750</a> <a id='n11751' href='#n11751'>11751</a> <a id='n11752' href='#n11752'>11752</a> <a id='n11753' href='#n11753'>11753</a> <a id='n11754' href='#n11754'>11754</a> <a id='n11755' href='#n11755'>11755</a> <a id='n11756' href='#n11756'>11756</a> <a id='n11757' href='#n11757'>11757</a> <a id='n11758' href='#n11758'>11758</a> <a id='n11759' href='#n11759'>11759</a> <a id='n11760' href='#n11760'>11760</a> <a id='n11761' href='#n11761'>11761</a> <a id='n11762' href='#n11762'>11762</a> <a id='n11763' href='#n11763'>11763</a> <a id='n11764' href='#n11764'>11764</a> <a id='n11765' href='#n11765'>11765</a> <a id='n11766' href='#n11766'>11766</a> <a id='n11767' href='#n11767'>11767</a> <a id='n11768' href='#n11768'>11768</a> <a id='n11769' href='#n11769'>11769</a> <a id='n11770' href='#n11770'>11770</a> <a id='n11771' href='#n11771'>11771</a> <a id='n11772' href='#n11772'>11772</a> <a id='n11773' href='#n11773'>11773</a> <a id='n11774' href='#n11774'>11774</a> <a id='n11775' href='#n11775'>11775</a> <a id='n11776' href='#n11776'>11776</a> <a id='n11777' href='#n11777'>11777</a> <a id='n11778' href='#n11778'>11778</a> <a id='n11779' href='#n11779'>11779</a> <a id='n11780' href='#n11780'>11780</a> <a id='n11781' href='#n11781'>11781</a> <a id='n11782' href='#n11782'>11782</a> <a id='n11783' href='#n11783'>11783</a> <a id='n11784' href='#n11784'>11784</a> <a id='n11785' href='#n11785'>11785</a> <a id='n11786' href='#n11786'>11786</a> <a id='n11787' href='#n11787'>11787</a> <a id='n11788' href='#n11788'>11788</a> <a id='n11789' href='#n11789'>11789</a> <a id='n11790' href='#n11790'>11790</a> <a id='n11791' href='#n11791'>11791</a> <a id='n11792' href='#n11792'>11792</a> <a id='n11793' href='#n11793'>11793</a> <a id='n11794' href='#n11794'>11794</a> <a id='n11795' href='#n11795'>11795</a> <a id='n11796' href='#n11796'>11796</a> <a id='n11797' href='#n11797'>11797</a> <a id='n11798' href='#n11798'>11798</a> <a id='n11799' href='#n11799'>11799</a> <a id='n11800' href='#n11800'>11800</a> <a id='n11801' href='#n11801'>11801</a> <a id='n11802' href='#n11802'>11802</a> <a id='n11803' href='#n11803'>11803</a> <a id='n11804' href='#n11804'>11804</a> <a id='n11805' href='#n11805'>11805</a> <a id='n11806' href='#n11806'>11806</a> <a id='n11807' href='#n11807'>11807</a> <a id='n11808' href='#n11808'>11808</a> <a id='n11809' href='#n11809'>11809</a> <a id='n11810' href='#n11810'>11810</a> <a id='n11811' href='#n11811'>11811</a> <a id='n11812' href='#n11812'>11812</a> <a id='n11813' href='#n11813'>11813</a> <a id='n11814' href='#n11814'>11814</a> <a id='n11815' href='#n11815'>11815</a> <a id='n11816' href='#n11816'>11816</a> <a id='n11817' href='#n11817'>11817</a> <a id='n11818' href='#n11818'>11818</a> <a id='n11819' href='#n11819'>11819</a> <a id='n11820' href='#n11820'>11820</a> <a id='n11821' href='#n11821'>11821</a> <a id='n11822' href='#n11822'>11822</a> <a id='n11823' href='#n11823'>11823</a> <a id='n11824' href='#n11824'>11824</a> <a id='n11825' href='#n11825'>11825</a> <a id='n11826' href='#n11826'>11826</a> <a id='n11827' href='#n11827'>11827</a> <a id='n11828' href='#n11828'>11828</a> <a id='n11829' href='#n11829'>11829</a> <a id='n11830' href='#n11830'>11830</a> <a id='n11831' href='#n11831'>11831</a> <a id='n11832' href='#n11832'>11832</a> <a id='n11833' href='#n11833'>11833</a> <a id='n11834' href='#n11834'>11834</a> <a id='n11835' href='#n11835'>11835</a> <a id='n11836' href='#n11836'>11836</a> <a id='n11837' href='#n11837'>11837</a> <a id='n11838' href='#n11838'>11838</a> <a id='n11839' href='#n11839'>11839</a> <a id='n11840' href='#n11840'>11840</a> <a id='n11841' href='#n11841'>11841</a> <a id='n11842' href='#n11842'>11842</a> <a id='n11843' href='#n11843'>11843</a> <a id='n11844' href='#n11844'>11844</a> <a id='n11845' href='#n11845'>11845</a> <a id='n11846' href='#n11846'>11846</a> <a id='n11847' href='#n11847'>11847</a> <a id='n11848' href='#n11848'>11848</a> <a id='n11849' href='#n11849'>11849</a> <a id='n11850' href='#n11850'>11850</a> <a id='n11851' href='#n11851'>11851</a> <a id='n11852' href='#n11852'>11852</a> <a id='n11853' href='#n11853'>11853</a> <a id='n11854' href='#n11854'>11854</a> <a id='n11855' href='#n11855'>11855</a> <a id='n11856' href='#n11856'>11856</a> <a id='n11857' href='#n11857'>11857</a> <a id='n11858' href='#n11858'>11858</a> <a id='n11859' href='#n11859'>11859</a> <a id='n11860' href='#n11860'>11860</a> <a id='n11861' href='#n11861'>11861</a> <a id='n11862' href='#n11862'>11862</a> <a id='n11863' href='#n11863'>11863</a> <a id='n11864' href='#n11864'>11864</a> <a id='n11865' href='#n11865'>11865</a> <a id='n11866' href='#n11866'>11866</a> <a id='n11867' href='#n11867'>11867</a> <a id='n11868' href='#n11868'>11868</a> <a id='n11869' href='#n11869'>11869</a> <a id='n11870' href='#n11870'>11870</a> <a id='n11871' href='#n11871'>11871</a> <a id='n11872' href='#n11872'>11872</a> <a id='n11873' href='#n11873'>11873</a> <a id='n11874' href='#n11874'>11874</a> <a id='n11875' href='#n11875'>11875</a> <a id='n11876' href='#n11876'>11876</a> <a id='n11877' href='#n11877'>11877</a> <a id='n11878' href='#n11878'>11878</a> <a id='n11879' href='#n11879'>11879</a> <a id='n11880' href='#n11880'>11880</a> <a id='n11881' href='#n11881'>11881</a> <a id='n11882' href='#n11882'>11882</a> <a id='n11883' href='#n11883'>11883</a> <a id='n11884' href='#n11884'>11884</a> <a id='n11885' href='#n11885'>11885</a> <a id='n11886' href='#n11886'>11886</a> <a id='n11887' href='#n11887'>11887</a> <a id='n11888' href='#n11888'>11888</a> <a id='n11889' href='#n11889'>11889</a> <a id='n11890' href='#n11890'>11890</a> <a id='n11891' href='#n11891'>11891</a> <a id='n11892' href='#n11892'>11892</a> <a id='n11893' href='#n11893'>11893</a> <a id='n11894' href='#n11894'>11894</a> <a id='n11895' href='#n11895'>11895</a> <a id='n11896' href='#n11896'>11896</a> <a id='n11897' href='#n11897'>11897</a> <a id='n11898' href='#n11898'>11898</a> <a id='n11899' href='#n11899'>11899</a> <a id='n11900' href='#n11900'>11900</a> <a id='n11901' href='#n11901'>11901</a> <a id='n11902' href='#n11902'>11902</a> <a id='n11903' href='#n11903'>11903</a> <a id='n11904' href='#n11904'>11904</a> <a id='n11905' href='#n11905'>11905</a> <a id='n11906' href='#n11906'>11906</a> <a id='n11907' href='#n11907'>11907</a> <a id='n11908' href='#n11908'>11908</a> <a id='n11909' href='#n11909'>11909</a> <a id='n11910' href='#n11910'>11910</a> <a id='n11911' href='#n11911'>11911</a> <a id='n11912' href='#n11912'>11912</a> <a id='n11913' href='#n11913'>11913</a> <a id='n11914' href='#n11914'>11914</a> <a id='n11915' href='#n11915'>11915</a> <a id='n11916' href='#n11916'>11916</a> <a id='n11917' href='#n11917'>11917</a> <a id='n11918' href='#n11918'>11918</a> <a id='n11919' href='#n11919'>11919</a> <a id='n11920' href='#n11920'>11920</a> <a id='n11921' href='#n11921'>11921</a> <a id='n11922' href='#n11922'>11922</a> <a id='n11923' href='#n11923'>11923</a> <a id='n11924' href='#n11924'>11924</a> <a id='n11925' href='#n11925'>11925</a> <a id='n11926' href='#n11926'>11926</a> <a id='n11927' href='#n11927'>11927</a> <a id='n11928' href='#n11928'>11928</a> <a id='n11929' href='#n11929'>11929</a> <a id='n11930' href='#n11930'>11930</a> <a id='n11931' href='#n11931'>11931</a> <a id='n11932' href='#n11932'>11932</a> <a id='n11933' href='#n11933'>11933</a> <a id='n11934' href='#n11934'>11934</a> <a id='n11935' href='#n11935'>11935</a> <a id='n11936' href='#n11936'>11936</a> <a id='n11937' href='#n11937'>11937</a> <a id='n11938' href='#n11938'>11938</a> <a id='n11939' href='#n11939'>11939</a> <a id='n11940' href='#n11940'>11940</a> <a id='n11941' href='#n11941'>11941</a> <a id='n11942' href='#n11942'>11942</a> <a id='n11943' href='#n11943'>11943</a> <a id='n11944' href='#n11944'>11944</a> <a id='n11945' href='#n11945'>11945</a> <a id='n11946' href='#n11946'>11946</a> <a id='n11947' href='#n11947'>11947</a> <a id='n11948' href='#n11948'>11948</a> <a id='n11949' href='#n11949'>11949</a> <a id='n11950' href='#n11950'>11950</a> <a id='n11951' href='#n11951'>11951</a> <a id='n11952' href='#n11952'>11952</a> <a id='n11953' href='#n11953'>11953</a> <a id='n11954' href='#n11954'>11954</a> <a id='n11955' href='#n11955'>11955</a> <a id='n11956' href='#n11956'>11956</a> <a id='n11957' href='#n11957'>11957</a> <a id='n11958' href='#n11958'>11958</a> <a id='n11959' href='#n11959'>11959</a> <a id='n11960' href='#n11960'>11960</a> <a id='n11961' href='#n11961'>11961</a> <a id='n11962' href='#n11962'>11962</a> <a id='n11963' href='#n11963'>11963</a> <a id='n11964' href='#n11964'>11964</a> <a id='n11965' href='#n11965'>11965</a> <a id='n11966' href='#n11966'>11966</a> <a id='n11967' href='#n11967'>11967</a> <a id='n11968' href='#n11968'>11968</a> <a id='n11969' href='#n11969'>11969</a> <a id='n11970' href='#n11970'>11970</a> <a id='n11971' href='#n11971'>11971</a> <a id='n11972' href='#n11972'>11972</a> <a id='n11973' href='#n11973'>11973</a> <a id='n11974' href='#n11974'>11974</a> <a id='n11975' href='#n11975'>11975</a> <a id='n11976' href='#n11976'>11976</a> <a id='n11977' href='#n11977'>11977</a> <a id='n11978' href='#n11978'>11978</a> <a id='n11979' href='#n11979'>11979</a> <a id='n11980' href='#n11980'>11980</a> <a id='n11981' href='#n11981'>11981</a> <a id='n11982' href='#n11982'>11982</a> <a id='n11983' href='#n11983'>11983</a> <a id='n11984' href='#n11984'>11984</a> <a id='n11985' href='#n11985'>11985</a> <a id='n11986' href='#n11986'>11986</a> <a id='n11987' href='#n11987'>11987</a> <a id='n11988' href='#n11988'>11988</a> <a id='n11989' href='#n11989'>11989</a> <a id='n11990' href='#n11990'>11990</a> <a id='n11991' href='#n11991'>11991</a> <a id='n11992' href='#n11992'>11992</a> <a id='n11993' href='#n11993'>11993</a> <a id='n11994' href='#n11994'>11994</a> <a id='n11995' href='#n11995'>11995</a> <a id='n11996' href='#n11996'>11996</a> <a id='n11997' href='#n11997'>11997</a> <a id='n11998' href='#n11998'>11998</a> <a id='n11999' href='#n11999'>11999</a> <a id='n12000' href='#n12000'>12000</a> <a id='n12001' href='#n12001'>12001</a> <a id='n12002' href='#n12002'>12002</a> <a id='n12003' href='#n12003'>12003</a> <a id='n12004' href='#n12004'>12004</a> <a id='n12005' href='#n12005'>12005</a> <a id='n12006' href='#n12006'>12006</a> <a id='n12007' href='#n12007'>12007</a> <a id='n12008' href='#n12008'>12008</a> <a id='n12009' href='#n12009'>12009</a> <a id='n12010' href='#n12010'>12010</a> <a id='n12011' href='#n12011'>12011</a> <a id='n12012' href='#n12012'>12012</a> <a id='n12013' href='#n12013'>12013</a> <a id='n12014' href='#n12014'>12014</a> <a id='n12015' href='#n12015'>12015</a> <a id='n12016' href='#n12016'>12016</a> <a id='n12017' href='#n12017'>12017</a> <a id='n12018' href='#n12018'>12018</a> <a id='n12019' href='#n12019'>12019</a> <a id='n12020' href='#n12020'>12020</a> <a id='n12021' href='#n12021'>12021</a> <a id='n12022' href='#n12022'>12022</a> <a id='n12023' href='#n12023'>12023</a> <a id='n12024' href='#n12024'>12024</a> <a id='n12025' href='#n12025'>12025</a> <a id='n12026' href='#n12026'>12026</a> <a id='n12027' href='#n12027'>12027</a> <a id='n12028' href='#n12028'>12028</a> <a id='n12029' href='#n12029'>12029</a> <a id='n12030' href='#n12030'>12030</a> <a id='n12031' href='#n12031'>12031</a> <a id='n12032' href='#n12032'>12032</a> <a id='n12033' href='#n12033'>12033</a> <a id='n12034' href='#n12034'>12034</a> <a id='n12035' href='#n12035'>12035</a> <a id='n12036' href='#n12036'>12036</a> <a id='n12037' href='#n12037'>12037</a> <a id='n12038' href='#n12038'>12038</a> <a id='n12039' href='#n12039'>12039</a> <a id='n12040' href='#n12040'>12040</a> <a id='n12041' href='#n12041'>12041</a> <a id='n12042' href='#n12042'>12042</a> <a id='n12043' href='#n12043'>12043</a> <a id='n12044' href='#n12044'>12044</a> <a id='n12045' href='#n12045'>12045</a> <a id='n12046' href='#n12046'>12046</a> <a id='n12047' href='#n12047'>12047</a> <a id='n12048' href='#n12048'>12048</a> <a id='n12049' href='#n12049'>12049</a> <a id='n12050' href='#n12050'>12050</a> <a id='n12051' href='#n12051'>12051</a> <a id='n12052' href='#n12052'>12052</a> <a id='n12053' href='#n12053'>12053</a> <a id='n12054' href='#n12054'>12054</a> <a id='n12055' href='#n12055'>12055</a> <a id='n12056' href='#n12056'>12056</a> <a id='n12057' href='#n12057'>12057</a> <a id='n12058' href='#n12058'>12058</a> <a id='n12059' href='#n12059'>12059</a> <a id='n12060' href='#n12060'>12060</a> <a id='n12061' href='#n12061'>12061</a> <a id='n12062' href='#n12062'>12062</a> <a id='n12063' href='#n12063'>12063</a> <a id='n12064' href='#n12064'>12064</a> <a id='n12065' href='#n12065'>12065</a> <a id='n12066' href='#n12066'>12066</a> <a id='n12067' href='#n12067'>12067</a> <a id='n12068' href='#n12068'>12068</a> <a id='n12069' href='#n12069'>12069</a> <a id='n12070' href='#n12070'>12070</a> <a id='n12071' href='#n12071'>12071</a> <a id='n12072' href='#n12072'>12072</a> <a id='n12073' href='#n12073'>12073</a> <a id='n12074' href='#n12074'>12074</a> <a id='n12075' href='#n12075'>12075</a> <a id='n12076' href='#n12076'>12076</a> <a id='n12077' href='#n12077'>12077</a> <a id='n12078' href='#n12078'>12078</a> <a id='n12079' href='#n12079'>12079</a> <a id='n12080' href='#n12080'>12080</a> <a id='n12081' href='#n12081'>12081</a> <a id='n12082' href='#n12082'>12082</a> <a id='n12083' href='#n12083'>12083</a> <a id='n12084' href='#n12084'>12084</a> <a id='n12085' href='#n12085'>12085</a> <a id='n12086' href='#n12086'>12086</a> <a id='n12087' href='#n12087'>12087</a> <a id='n12088' href='#n12088'>12088</a> <a id='n12089' href='#n12089'>12089</a> <a id='n12090' href='#n12090'>12090</a> <a id='n12091' href='#n12091'>12091</a> <a id='n12092' href='#n12092'>12092</a> <a id='n12093' href='#n12093'>12093</a> <a id='n12094' href='#n12094'>12094</a> <a id='n12095' href='#n12095'>12095</a> <a id='n12096' href='#n12096'>12096</a> <a id='n12097' href='#n12097'>12097</a> <a id='n12098' href='#n12098'>12098</a> <a id='n12099' href='#n12099'>12099</a> <a id='n12100' href='#n12100'>12100</a> <a id='n12101' href='#n12101'>12101</a> <a id='n12102' href='#n12102'>12102</a> <a id='n12103' href='#n12103'>12103</a> <a id='n12104' href='#n12104'>12104</a> <a id='n12105' href='#n12105'>12105</a> <a id='n12106' href='#n12106'>12106</a> <a id='n12107' href='#n12107'>12107</a> <a id='n12108' href='#n12108'>12108</a> <a id='n12109' href='#n12109'>12109</a> <a id='n12110' href='#n12110'>12110</a> <a id='n12111' href='#n12111'>12111</a> <a id='n12112' href='#n12112'>12112</a> <a id='n12113' href='#n12113'>12113</a> <a id='n12114' href='#n12114'>12114</a> <a id='n12115' href='#n12115'>12115</a> <a id='n12116' href='#n12116'>12116</a> <a id='n12117' href='#n12117'>12117</a> <a id='n12118' href='#n12118'>12118</a> <a id='n12119' href='#n12119'>12119</a> <a id='n12120' href='#n12120'>12120</a> <a id='n12121' href='#n12121'>12121</a> <a id='n12122' href='#n12122'>12122</a> <a id='n12123' href='#n12123'>12123</a> <a id='n12124' href='#n12124'>12124</a> <a id='n12125' href='#n12125'>12125</a> <a id='n12126' href='#n12126'>12126</a> <a id='n12127' href='#n12127'>12127</a> <a id='n12128' href='#n12128'>12128</a> <a id='n12129' href='#n12129'>12129</a> <a id='n12130' href='#n12130'>12130</a> <a id='n12131' href='#n12131'>12131</a> <a id='n12132' href='#n12132'>12132</a> <a id='n12133' href='#n12133'>12133</a> <a id='n12134' href='#n12134'>12134</a> <a id='n12135' href='#n12135'>12135</a> <a id='n12136' href='#n12136'>12136</a> <a id='n12137' href='#n12137'>12137</a> <a id='n12138' href='#n12138'>12138</a> <a id='n12139' href='#n12139'>12139</a> <a id='n12140' href='#n12140'>12140</a> <a id='n12141' href='#n12141'>12141</a> <a id='n12142' href='#n12142'>12142</a> <a id='n12143' href='#n12143'>12143</a> <a id='n12144' href='#n12144'>12144</a> <a id='n12145' href='#n12145'>12145</a> <a id='n12146' href='#n12146'>12146</a> <a id='n12147' href='#n12147'>12147</a> <a id='n12148' href='#n12148'>12148</a> <a id='n12149' href='#n12149'>12149</a> <a id='n12150' href='#n12150'>12150</a> <a id='n12151' href='#n12151'>12151</a> <a id='n12152' href='#n12152'>12152</a> <a id='n12153' href='#n12153'>12153</a> <a id='n12154' href='#n12154'>12154</a> <a id='n12155' href='#n12155'>12155</a> <a id='n12156' href='#n12156'>12156</a> <a id='n12157' href='#n12157'>12157</a> <a id='n12158' href='#n12158'>12158</a> <a id='n12159' href='#n12159'>12159</a> <a id='n12160' href='#n12160'>12160</a> <a id='n12161' href='#n12161'>12161</a> <a id='n12162' href='#n12162'>12162</a> <a id='n12163' href='#n12163'>12163</a> <a id='n12164' href='#n12164'>12164</a> <a id='n12165' href='#n12165'>12165</a> <a id='n12166' href='#n12166'>12166</a> <a id='n12167' href='#n12167'>12167</a> <a id='n12168' href='#n12168'>12168</a> <a id='n12169' href='#n12169'>12169</a> <a id='n12170' href='#n12170'>12170</a> <a id='n12171' href='#n12171'>12171</a> <a id='n12172' href='#n12172'>12172</a> <a id='n12173' href='#n12173'>12173</a> <a id='n12174' href='#n12174'>12174</a> <a id='n12175' href='#n12175'>12175</a> <a id='n12176' href='#n12176'>12176</a> <a id='n12177' href='#n12177'>12177</a> <a id='n12178' href='#n12178'>12178</a> <a id='n12179' href='#n12179'>12179</a> <a id='n12180' href='#n12180'>12180</a> <a id='n12181' href='#n12181'>12181</a> <a id='n12182' href='#n12182'>12182</a> <a id='n12183' href='#n12183'>12183</a> <a id='n12184' href='#n12184'>12184</a> <a id='n12185' href='#n12185'>12185</a> <a id='n12186' href='#n12186'>12186</a> <a id='n12187' href='#n12187'>12187</a> <a id='n12188' href='#n12188'>12188</a> <a id='n12189' href='#n12189'>12189</a> <a id='n12190' href='#n12190'>12190</a> <a id='n12191' href='#n12191'>12191</a> <a id='n12192' href='#n12192'>12192</a> <a id='n12193' href='#n12193'>12193</a> <a id='n12194' href='#n12194'>12194</a> <a id='n12195' href='#n12195'>12195</a> <a id='n12196' href='#n12196'>12196</a> <a id='n12197' href='#n12197'>12197</a> <a id='n12198' href='#n12198'>12198</a> <a id='n12199' href='#n12199'>12199</a> <a id='n12200' href='#n12200'>12200</a> <a id='n12201' href='#n12201'>12201</a> <a id='n12202' href='#n12202'>12202</a> <a id='n12203' href='#n12203'>12203</a> <a id='n12204' href='#n12204'>12204</a> <a id='n12205' href='#n12205'>12205</a> <a id='n12206' href='#n12206'>12206</a> <a id='n12207' href='#n12207'>12207</a> <a id='n12208' href='#n12208'>12208</a> <a id='n12209' href='#n12209'>12209</a> <a id='n12210' href='#n12210'>12210</a> <a id='n12211' href='#n12211'>12211</a> <a id='n12212' href='#n12212'>12212</a> <a id='n12213' href='#n12213'>12213</a> <a id='n12214' href='#n12214'>12214</a> <a id='n12215' href='#n12215'>12215</a> <a id='n12216' href='#n12216'>12216</a> <a id='n12217' href='#n12217'>12217</a> <a id='n12218' href='#n12218'>12218</a> <a id='n12219' href='#n12219'>12219</a> <a id='n12220' href='#n12220'>12220</a> <a id='n12221' href='#n12221'>12221</a> <a id='n12222' href='#n12222'>12222</a> <a id='n12223' href='#n12223'>12223</a> <a id='n12224' href='#n12224'>12224</a> <a id='n12225' href='#n12225'>12225</a> <a id='n12226' href='#n12226'>12226</a> <a id='n12227' href='#n12227'>12227</a> <a id='n12228' href='#n12228'>12228</a> <a id='n12229' href='#n12229'>12229</a> <a id='n12230' href='#n12230'>12230</a> <a id='n12231' href='#n12231'>12231</a> <a id='n12232' href='#n12232'>12232</a> <a id='n12233' href='#n12233'>12233</a> <a id='n12234' href='#n12234'>12234</a> <a id='n12235' href='#n12235'>12235</a> <a id='n12236' href='#n12236'>12236</a> <a id='n12237' href='#n12237'>12237</a> <a id='n12238' href='#n12238'>12238</a> <a id='n12239' href='#n12239'>12239</a> <a id='n12240' href='#n12240'>12240</a> <a id='n12241' href='#n12241'>12241</a> <a id='n12242' href='#n12242'>12242</a> <a id='n12243' href='#n12243'>12243</a> <a id='n12244' href='#n12244'>12244</a> <a id='n12245' href='#n12245'>12245</a> <a id='n12246' href='#n12246'>12246</a> <a id='n12247' href='#n12247'>12247</a> <a id='n12248' href='#n12248'>12248</a> <a id='n12249' href='#n12249'>12249</a> <a id='n12250' href='#n12250'>12250</a> <a id='n12251' href='#n12251'>12251</a> <a id='n12252' href='#n12252'>12252</a> <a id='n12253' href='#n12253'>12253</a> <a id='n12254' href='#n12254'>12254</a> <a id='n12255' href='#n12255'>12255</a> <a id='n12256' href='#n12256'>12256</a> <a id='n12257' href='#n12257'>12257</a> <a id='n12258' href='#n12258'>12258</a> <a id='n12259' href='#n12259'>12259</a> <a id='n12260' href='#n12260'>12260</a> <a id='n12261' href='#n12261'>12261</a> <a id='n12262' href='#n12262'>12262</a> <a id='n12263' href='#n12263'>12263</a> <a id='n12264' href='#n12264'>12264</a> <a id='n12265' href='#n12265'>12265</a> <a id='n12266' href='#n12266'>12266</a> <a id='n12267' href='#n12267'>12267</a> <a id='n12268' href='#n12268'>12268</a> <a id='n12269' href='#n12269'>12269</a> <a id='n12270' href='#n12270'>12270</a> <a id='n12271' href='#n12271'>12271</a> <a id='n12272' href='#n12272'>12272</a> <a id='n12273' href='#n12273'>12273</a> <a id='n12274' href='#n12274'>12274</a> <a id='n12275' href='#n12275'>12275</a> <a id='n12276' href='#n12276'>12276</a> <a id='n12277' href='#n12277'>12277</a> <a id='n12278' href='#n12278'>12278</a> <a id='n12279' href='#n12279'>12279</a> <a id='n12280' href='#n12280'>12280</a> <a id='n12281' href='#n12281'>12281</a> <a id='n12282' href='#n12282'>12282</a> <a id='n12283' href='#n12283'>12283</a> <a id='n12284' href='#n12284'>12284</a> <a id='n12285' href='#n12285'>12285</a> <a id='n12286' href='#n12286'>12286</a> <a id='n12287' href='#n12287'>12287</a> <a id='n12288' href='#n12288'>12288</a> <a id='n12289' href='#n12289'>12289</a> <a id='n12290' href='#n12290'>12290</a> <a id='n12291' href='#n12291'>12291</a> <a id='n12292' href='#n12292'>12292</a> <a id='n12293' href='#n12293'>12293</a> <a id='n12294' href='#n12294'>12294</a> <a id='n12295' href='#n12295'>12295</a> <a id='n12296' href='#n12296'>12296</a> <a id='n12297' href='#n12297'>12297</a> <a id='n12298' href='#n12298'>12298</a> <a id='n12299' href='#n12299'>12299</a> <a id='n12300' href='#n12300'>12300</a> <a id='n12301' href='#n12301'>12301</a> <a id='n12302' href='#n12302'>12302</a> <a id='n12303' href='#n12303'>12303</a> <a id='n12304' href='#n12304'>12304</a> <a id='n12305' href='#n12305'>12305</a> <a id='n12306' href='#n12306'>12306</a> <a id='n12307' href='#n12307'>12307</a> <a id='n12308' href='#n12308'>12308</a> <a id='n12309' href='#n12309'>12309</a> <a id='n12310' href='#n12310'>12310</a> <a id='n12311' href='#n12311'>12311</a> <a id='n12312' href='#n12312'>12312</a> <a id='n12313' href='#n12313'>12313</a> <a id='n12314' href='#n12314'>12314</a> <a id='n12315' href='#n12315'>12315</a> <a id='n12316' href='#n12316'>12316</a> <a id='n12317' href='#n12317'>12317</a> <a id='n12318' href='#n12318'>12318</a> <a id='n12319' href='#n12319'>12319</a> <a id='n12320' href='#n12320'>12320</a> <a id='n12321' href='#n12321'>12321</a> <a id='n12322' href='#n12322'>12322</a> <a id='n12323' href='#n12323'>12323</a> <a id='n12324' href='#n12324'>12324</a> <a id='n12325' href='#n12325'>12325</a> <a id='n12326' href='#n12326'>12326</a> <a id='n12327' href='#n12327'>12327</a> <a id='n12328' href='#n12328'>12328</a> <a id='n12329' href='#n12329'>12329</a> <a id='n12330' href='#n12330'>12330</a> <a id='n12331' href='#n12331'>12331</a> <a id='n12332' href='#n12332'>12332</a> <a id='n12333' href='#n12333'>12333</a> <a id='n12334' href='#n12334'>12334</a> <a id='n12335' href='#n12335'>12335</a> <a id='n12336' href='#n12336'>12336</a> <a id='n12337' href='#n12337'>12337</a> <a id='n12338' href='#n12338'>12338</a> <a id='n12339' href='#n12339'>12339</a> <a id='n12340' href='#n12340'>12340</a> <a id='n12341' href='#n12341'>12341</a> <a id='n12342' href='#n12342'>12342</a> <a id='n12343' href='#n12343'>12343</a> <a id='n12344' href='#n12344'>12344</a> <a id='n12345' href='#n12345'>12345</a> <a id='n12346' href='#n12346'>12346</a> <a id='n12347' href='#n12347'>12347</a> <a id='n12348' href='#n12348'>12348</a> <a id='n12349' href='#n12349'>12349</a> <a id='n12350' href='#n12350'>12350</a> <a id='n12351' href='#n12351'>12351</a> <a id='n12352' href='#n12352'>12352</a> <a id='n12353' href='#n12353'>12353</a> <a id='n12354' href='#n12354'>12354</a> <a id='n12355' href='#n12355'>12355</a> <a id='n12356' href='#n12356'>12356</a> <a id='n12357' href='#n12357'>12357</a> <a id='n12358' href='#n12358'>12358</a> <a id='n12359' href='#n12359'>12359</a> <a id='n12360' href='#n12360'>12360</a> <a id='n12361' href='#n12361'>12361</a> <a id='n12362' href='#n12362'>12362</a> <a id='n12363' href='#n12363'>12363</a> <a id='n12364' href='#n12364'>12364</a> <a id='n12365' href='#n12365'>12365</a> <a id='n12366' href='#n12366'>12366</a> <a id='n12367' href='#n12367'>12367</a> <a id='n12368' href='#n12368'>12368</a> <a id='n12369' href='#n12369'>12369</a> <a id='n12370' href='#n12370'>12370</a> <a id='n12371' href='#n12371'>12371</a> <a id='n12372' href='#n12372'>12372</a> <a id='n12373' href='#n12373'>12373</a> <a id='n12374' href='#n12374'>12374</a> <a id='n12375' href='#n12375'>12375</a> <a id='n12376' href='#n12376'>12376</a> <a id='n12377' href='#n12377'>12377</a> <a id='n12378' href='#n12378'>12378</a> <a id='n12379' href='#n12379'>12379</a> <a id='n12380' href='#n12380'>12380</a> <a id='n12381' href='#n12381'>12381</a> <a id='n12382' href='#n12382'>12382</a> <a id='n12383' href='#n12383'>12383</a> <a id='n12384' href='#n12384'>12384</a> <a id='n12385' href='#n12385'>12385</a> <a id='n12386' href='#n12386'>12386</a> <a id='n12387' href='#n12387'>12387</a> <a id='n12388' href='#n12388'>12388</a> <a id='n12389' href='#n12389'>12389</a> <a id='n12390' href='#n12390'>12390</a> <a id='n12391' href='#n12391'>12391</a> <a id='n12392' href='#n12392'>12392</a> <a id='n12393' href='#n12393'>12393</a> <a id='n12394' href='#n12394'>12394</a> <a id='n12395' href='#n12395'>12395</a> <a id='n12396' href='#n12396'>12396</a> <a id='n12397' href='#n12397'>12397</a> <a id='n12398' href='#n12398'>12398</a> <a id='n12399' href='#n12399'>12399</a> <a id='n12400' href='#n12400'>12400</a> <a id='n12401' href='#n12401'>12401</a> <a id='n12402' href='#n12402'>12402</a> <a id='n12403' href='#n12403'>12403</a> <a id='n12404' href='#n12404'>12404</a> <a id='n12405' href='#n12405'>12405</a> <a id='n12406' href='#n12406'>12406</a> <a id='n12407' href='#n12407'>12407</a> <a id='n12408' href='#n12408'>12408</a> <a id='n12409' href='#n12409'>12409</a> <a id='n12410' href='#n12410'>12410</a> <a id='n12411' href='#n12411'>12411</a> <a id='n12412' href='#n12412'>12412</a> <a id='n12413' href='#n12413'>12413</a> <a id='n12414' href='#n12414'>12414</a> <a id='n12415' href='#n12415'>12415</a> <a id='n12416' href='#n12416'>12416</a> <a id='n12417' href='#n12417'>12417</a> <a id='n12418' href='#n12418'>12418</a> <a id='n12419' href='#n12419'>12419</a> <a id='n12420' href='#n12420'>12420</a> <a id='n12421' href='#n12421'>12421</a> <a id='n12422' href='#n12422'>12422</a> <a id='n12423' href='#n12423'>12423</a> <a id='n12424' href='#n12424'>12424</a> <a id='n12425' href='#n12425'>12425</a> <a id='n12426' href='#n12426'>12426</a> <a id='n12427' href='#n12427'>12427</a> <a id='n12428' href='#n12428'>12428</a> <a id='n12429' href='#n12429'>12429</a> <a id='n12430' href='#n12430'>12430</a> <a id='n12431' href='#n12431'>12431</a> <a id='n12432' href='#n12432'>12432</a> <a id='n12433' href='#n12433'>12433</a> <a id='n12434' href='#n12434'>12434</a> <a id='n12435' href='#n12435'>12435</a> <a id='n12436' href='#n12436'>12436</a> <a id='n12437' href='#n12437'>12437</a> <a id='n12438' href='#n12438'>12438</a> <a id='n12439' href='#n12439'>12439</a> <a id='n12440' href='#n12440'>12440</a> <a id='n12441' href='#n12441'>12441</a> <a id='n12442' href='#n12442'>12442</a> <a id='n12443' href='#n12443'>12443</a> <a id='n12444' href='#n12444'>12444</a> <a id='n12445' href='#n12445'>12445</a> <a id='n12446' href='#n12446'>12446</a> <a id='n12447' href='#n12447'>12447</a> <a id='n12448' href='#n12448'>12448</a> <a id='n12449' href='#n12449'>12449</a> <a id='n12450' href='#n12450'>12450</a> <a id='n12451' href='#n12451'>12451</a> <a id='n12452' href='#n12452'>12452</a> <a id='n12453' href='#n12453'>12453</a> <a id='n12454' href='#n12454'>12454</a> <a id='n12455' href='#n12455'>12455</a> <a id='n12456' href='#n12456'>12456</a> <a id='n12457' href='#n12457'>12457</a> <a id='n12458' href='#n12458'>12458</a> <a id='n12459' href='#n12459'>12459</a> <a id='n12460' href='#n12460'>12460</a> <a id='n12461' href='#n12461'>12461</a> <a id='n12462' href='#n12462'>12462</a> <a id='n12463' href='#n12463'>12463</a> <a id='n12464' href='#n12464'>12464</a> <a id='n12465' href='#n12465'>12465</a> <a id='n12466' href='#n12466'>12466</a> <a id='n12467' href='#n12467'>12467</a> <a id='n12468' href='#n12468'>12468</a> <a id='n12469' href='#n12469'>12469</a> <a id='n12470' href='#n12470'>12470</a> <a id='n12471' href='#n12471'>12471</a> <a id='n12472' href='#n12472'>12472</a> <a id='n12473' href='#n12473'>12473</a> <a id='n12474' href='#n12474'>12474</a> <a id='n12475' href='#n12475'>12475</a> <a id='n12476' href='#n12476'>12476</a> <a id='n12477' href='#n12477'>12477</a> <a id='n12478' href='#n12478'>12478</a> <a id='n12479' href='#n12479'>12479</a> <a id='n12480' href='#n12480'>12480</a> <a id='n12481' href='#n12481'>12481</a> <a id='n12482' href='#n12482'>12482</a> <a id='n12483' href='#n12483'>12483</a> <a id='n12484' href='#n12484'>12484</a> <a id='n12485' href='#n12485'>12485</a> <a id='n12486' href='#n12486'>12486</a> <a id='n12487' href='#n12487'>12487</a> <a id='n12488' href='#n12488'>12488</a> <a id='n12489' href='#n12489'>12489</a> <a id='n12490' href='#n12490'>12490</a> <a id='n12491' href='#n12491'>12491</a> <a id='n12492' href='#n12492'>12492</a> <a id='n12493' href='#n12493'>12493</a> <a id='n12494' href='#n12494'>12494</a> <a id='n12495' href='#n12495'>12495</a> <a id='n12496' href='#n12496'>12496</a> <a id='n12497' href='#n12497'>12497</a> <a id='n12498' href='#n12498'>12498</a> <a id='n12499' href='#n12499'>12499</a> <a id='n12500' href='#n12500'>12500</a> <a id='n12501' href='#n12501'>12501</a> <a id='n12502' href='#n12502'>12502</a> <a id='n12503' href='#n12503'>12503</a> <a id='n12504' href='#n12504'>12504</a> <a id='n12505' href='#n12505'>12505</a> <a id='n12506' href='#n12506'>12506</a> <a id='n12507' href='#n12507'>12507</a> <a id='n12508' href='#n12508'>12508</a> <a id='n12509' href='#n12509'>12509</a> <a id='n12510' href='#n12510'>12510</a> <a id='n12511' href='#n12511'>12511</a> <a id='n12512' href='#n12512'>12512</a> <a id='n12513' href='#n12513'>12513</a> <a id='n12514' href='#n12514'>12514</a> <a id='n12515' href='#n12515'>12515</a> <a id='n12516' href='#n12516'>12516</a> <a id='n12517' href='#n12517'>12517</a> <a id='n12518' href='#n12518'>12518</a> <a id='n12519' href='#n12519'>12519</a> <a id='n12520' href='#n12520'>12520</a> <a id='n12521' href='#n12521'>12521</a> <a id='n12522' href='#n12522'>12522</a> <a id='n12523' href='#n12523'>12523</a> <a id='n12524' href='#n12524'>12524</a> <a id='n12525' href='#n12525'>12525</a> <a id='n12526' href='#n12526'>12526</a> <a id='n12527' href='#n12527'>12527</a> <a id='n12528' href='#n12528'>12528</a> <a id='n12529' href='#n12529'>12529</a> <a id='n12530' href='#n12530'>12530</a> <a id='n12531' href='#n12531'>12531</a> <a id='n12532' href='#n12532'>12532</a> <a id='n12533' href='#n12533'>12533</a> <a id='n12534' href='#n12534'>12534</a> <a id='n12535' href='#n12535'>12535</a> <a id='n12536' href='#n12536'>12536</a> <a id='n12537' href='#n12537'>12537</a> <a id='n12538' href='#n12538'>12538</a> <a id='n12539' href='#n12539'>12539</a> <a id='n12540' href='#n12540'>12540</a> <a id='n12541' href='#n12541'>12541</a> <a id='n12542' href='#n12542'>12542</a> <a id='n12543' href='#n12543'>12543</a> <a id='n12544' href='#n12544'>12544</a> <a id='n12545' href='#n12545'>12545</a> <a id='n12546' href='#n12546'>12546</a> <a id='n12547' href='#n12547'>12547</a> <a id='n12548' href='#n12548'>12548</a> <a id='n12549' href='#n12549'>12549</a> <a id='n12550' href='#n12550'>12550</a> <a id='n12551' href='#n12551'>12551</a> <a id='n12552' href='#n12552'>12552</a> <a id='n12553' href='#n12553'>12553</a> <a id='n12554' href='#n12554'>12554</a> <a id='n12555' href='#n12555'>12555</a> <a id='n12556' href='#n12556'>12556</a> <a id='n12557' href='#n12557'>12557</a> <a id='n12558' href='#n12558'>12558</a> <a id='n12559' href='#n12559'>12559</a> <a id='n12560' href='#n12560'>12560</a> <a id='n12561' href='#n12561'>12561</a> <a id='n12562' href='#n12562'>12562</a> <a id='n12563' href='#n12563'>12563</a> <a id='n12564' href='#n12564'>12564</a> <a id='n12565' href='#n12565'>12565</a> <a id='n12566' href='#n12566'>12566</a> <a id='n12567' href='#n12567'>12567</a> <a id='n12568' href='#n12568'>12568</a> <a id='n12569' href='#n12569'>12569</a> <a id='n12570' href='#n12570'>12570</a> <a id='n12571' href='#n12571'>12571</a> <a id='n12572' href='#n12572'>12572</a> <a id='n12573' href='#n12573'>12573</a> <a id='n12574' href='#n12574'>12574</a> <a id='n12575' href='#n12575'>12575</a> <a id='n12576' href='#n12576'>12576</a> <a id='n12577' href='#n12577'>12577</a> <a id='n12578' href='#n12578'>12578</a> <a id='n12579' href='#n12579'>12579</a> <a id='n12580' href='#n12580'>12580</a> <a id='n12581' href='#n12581'>12581</a> <a id='n12582' href='#n12582'>12582</a> <a id='n12583' href='#n12583'>12583</a> <a id='n12584' href='#n12584'>12584</a> <a id='n12585' href='#n12585'>12585</a> <a id='n12586' href='#n12586'>12586</a> <a id='n12587' href='#n12587'>12587</a> <a id='n12588' href='#n12588'>12588</a> <a id='n12589' href='#n12589'>12589</a> <a id='n12590' href='#n12590'>12590</a> <a id='n12591' href='#n12591'>12591</a> <a id='n12592' href='#n12592'>12592</a> <a id='n12593' href='#n12593'>12593</a> <a id='n12594' href='#n12594'>12594</a> <a id='n12595' href='#n12595'>12595</a> <a id='n12596' href='#n12596'>12596</a> <a id='n12597' href='#n12597'>12597</a> <a id='n12598' href='#n12598'>12598</a> <a id='n12599' href='#n12599'>12599</a> <a id='n12600' href='#n12600'>12600</a> <a id='n12601' href='#n12601'>12601</a> <a id='n12602' href='#n12602'>12602</a> <a id='n12603' href='#n12603'>12603</a> <a id='n12604' href='#n12604'>12604</a> <a id='n12605' href='#n12605'>12605</a> <a id='n12606' href='#n12606'>12606</a> <a id='n12607' href='#n12607'>12607</a> <a id='n12608' href='#n12608'>12608</a> <a id='n12609' href='#n12609'>12609</a> <a id='n12610' href='#n12610'>12610</a> <a id='n12611' href='#n12611'>12611</a> <a id='n12612' href='#n12612'>12612</a> <a id='n12613' href='#n12613'>12613</a> <a id='n12614' href='#n12614'>12614</a> <a id='n12615' href='#n12615'>12615</a> <a id='n12616' href='#n12616'>12616</a> <a id='n12617' href='#n12617'>12617</a> <a id='n12618' href='#n12618'>12618</a> <a id='n12619' href='#n12619'>12619</a> <a id='n12620' href='#n12620'>12620</a> <a id='n12621' href='#n12621'>12621</a> <a id='n12622' href='#n12622'>12622</a> <a id='n12623' href='#n12623'>12623</a> <a id='n12624' href='#n12624'>12624</a> <a id='n12625' href='#n12625'>12625</a> <a id='n12626' href='#n12626'>12626</a> <a id='n12627' href='#n12627'>12627</a> <a id='n12628' href='#n12628'>12628</a> <a id='n12629' href='#n12629'>12629</a> <a id='n12630' href='#n12630'>12630</a> <a id='n12631' href='#n12631'>12631</a> <a id='n12632' href='#n12632'>12632</a> <a id='n12633' href='#n12633'>12633</a> <a id='n12634' href='#n12634'>12634</a> <a id='n12635' href='#n12635'>12635</a> <a id='n12636' href='#n12636'>12636</a> <a id='n12637' href='#n12637'>12637</a> <a id='n12638' href='#n12638'>12638</a> <a id='n12639' href='#n12639'>12639</a> <a id='n12640' href='#n12640'>12640</a> <a id='n12641' href='#n12641'>12641</a> <a id='n12642' href='#n12642'>12642</a> <a id='n12643' href='#n12643'>12643</a> <a id='n12644' href='#n12644'>12644</a> <a id='n12645' href='#n12645'>12645</a> <a id='n12646' href='#n12646'>12646</a> <a id='n12647' href='#n12647'>12647</a> <a id='n12648' href='#n12648'>12648</a> <a id='n12649' href='#n12649'>12649</a> <a id='n12650' href='#n12650'>12650</a> <a id='n12651' href='#n12651'>12651</a> <a id='n12652' href='#n12652'>12652</a> <a id='n12653' href='#n12653'>12653</a> <a id='n12654' href='#n12654'>12654</a> <a id='n12655' href='#n12655'>12655</a> <a id='n12656' href='#n12656'>12656</a> <a id='n12657' href='#n12657'>12657</a> <a id='n12658' href='#n12658'>12658</a> <a id='n12659' href='#n12659'>12659</a> <a id='n12660' href='#n12660'>12660</a> <a id='n12661' href='#n12661'>12661</a> <a id='n12662' href='#n12662'>12662</a> <a id='n12663' href='#n12663'>12663</a> <a id='n12664' href='#n12664'>12664</a> <a id='n12665' href='#n12665'>12665</a> <a id='n12666' href='#n12666'>12666</a> <a id='n12667' href='#n12667'>12667</a> <a id='n12668' href='#n12668'>12668</a> <a id='n12669' href='#n12669'>12669</a> <a id='n12670' href='#n12670'>12670</a> <a id='n12671' href='#n12671'>12671</a> <a id='n12672' href='#n12672'>12672</a> <a id='n12673' href='#n12673'>12673</a> <a id='n12674' href='#n12674'>12674</a> <a id='n12675' href='#n12675'>12675</a> <a id='n12676' href='#n12676'>12676</a> <a id='n12677' href='#n12677'>12677</a> <a id='n12678' href='#n12678'>12678</a> <a id='n12679' href='#n12679'>12679</a> <a id='n12680' href='#n12680'>12680</a> <a id='n12681' href='#n12681'>12681</a> <a id='n12682' href='#n12682'>12682</a> <a id='n12683' href='#n12683'>12683</a> <a id='n12684' href='#n12684'>12684</a> <a id='n12685' href='#n12685'>12685</a> <a id='n12686' href='#n12686'>12686</a> <a id='n12687' href='#n12687'>12687</a> <a id='n12688' href='#n12688'>12688</a> <a id='n12689' href='#n12689'>12689</a> <a id='n12690' href='#n12690'>12690</a> <a id='n12691' href='#n12691'>12691</a> <a id='n12692' href='#n12692'>12692</a> <a id='n12693' href='#n12693'>12693</a> <a id='n12694' href='#n12694'>12694</a> <a id='n12695' href='#n12695'>12695</a> <a id='n12696' href='#n12696'>12696</a> <a id='n12697' href='#n12697'>12697</a> <a id='n12698' href='#n12698'>12698</a> <a id='n12699' href='#n12699'>12699</a> <a id='n12700' href='#n12700'>12700</a> <a id='n12701' href='#n12701'>12701</a> <a id='n12702' href='#n12702'>12702</a> <a id='n12703' href='#n12703'>12703</a> <a id='n12704' href='#n12704'>12704</a> <a id='n12705' href='#n12705'>12705</a> <a id='n12706' href='#n12706'>12706</a> <a id='n12707' href='#n12707'>12707</a> <a id='n12708' href='#n12708'>12708</a> <a id='n12709' href='#n12709'>12709</a> <a id='n12710' href='#n12710'>12710</a> <a id='n12711' href='#n12711'>12711</a> <a id='n12712' href='#n12712'>12712</a> <a id='n12713' href='#n12713'>12713</a> <a id='n12714' href='#n12714'>12714</a> <a id='n12715' href='#n12715'>12715</a> <a id='n12716' href='#n12716'>12716</a> <a id='n12717' href='#n12717'>12717</a> <a id='n12718' href='#n12718'>12718</a> <a id='n12719' href='#n12719'>12719</a> <a id='n12720' href='#n12720'>12720</a> <a id='n12721' href='#n12721'>12721</a> <a id='n12722' href='#n12722'>12722</a> <a id='n12723' href='#n12723'>12723</a> <a id='n12724' href='#n12724'>12724</a> <a id='n12725' href='#n12725'>12725</a> <a id='n12726' href='#n12726'>12726</a> <a id='n12727' href='#n12727'>12727</a> <a id='n12728' href='#n12728'>12728</a> <a id='n12729' href='#n12729'>12729</a> <a id='n12730' href='#n12730'>12730</a> <a id='n12731' href='#n12731'>12731</a> <a id='n12732' href='#n12732'>12732</a> <a id='n12733' href='#n12733'>12733</a> <a id='n12734' href='#n12734'>12734</a> <a id='n12735' href='#n12735'>12735</a> <a id='n12736' href='#n12736'>12736</a> <a id='n12737' href='#n12737'>12737</a> <a id='n12738' href='#n12738'>12738</a> <a id='n12739' href='#n12739'>12739</a> <a id='n12740' href='#n12740'>12740</a> <a id='n12741' href='#n12741'>12741</a> <a id='n12742' href='#n12742'>12742</a> <a id='n12743' href='#n12743'>12743</a> <a id='n12744' href='#n12744'>12744</a> <a id='n12745' href='#n12745'>12745</a> <a id='n12746' href='#n12746'>12746</a> <a id='n12747' href='#n12747'>12747</a> <a id='n12748' href='#n12748'>12748</a> <a id='n12749' href='#n12749'>12749</a> <a id='n12750' href='#n12750'>12750</a> <a id='n12751' href='#n12751'>12751</a> <a id='n12752' href='#n12752'>12752</a> <a id='n12753' href='#n12753'>12753</a> <a id='n12754' href='#n12754'>12754</a> <a id='n12755' href='#n12755'>12755</a> <a id='n12756' href='#n12756'>12756</a> <a id='n12757' href='#n12757'>12757</a> <a id='n12758' href='#n12758'>12758</a> <a id='n12759' href='#n12759'>12759</a> <a id='n12760' href='#n12760'>12760</a> <a id='n12761' href='#n12761'>12761</a> <a id='n12762' href='#n12762'>12762</a> <a id='n12763' href='#n12763'>12763</a> <a id='n12764' href='#n12764'>12764</a> <a id='n12765' href='#n12765'>12765</a> <a id='n12766' href='#n12766'>12766</a> <a id='n12767' href='#n12767'>12767</a> <a id='n12768' href='#n12768'>12768</a> <a id='n12769' href='#n12769'>12769</a> <a id='n12770' href='#n12770'>12770</a> <a id='n12771' href='#n12771'>12771</a> <a id='n12772' href='#n12772'>12772</a> <a id='n12773' href='#n12773'>12773</a> <a id='n12774' href='#n12774'>12774</a> <a id='n12775' href='#n12775'>12775</a> <a id='n12776' href='#n12776'>12776</a> <a id='n12777' href='#n12777'>12777</a> <a id='n12778' href='#n12778'>12778</a> <a id='n12779' href='#n12779'>12779</a> <a id='n12780' href='#n12780'>12780</a> <a id='n12781' href='#n12781'>12781</a> <a id='n12782' href='#n12782'>12782</a> <a id='n12783' href='#n12783'>12783</a> <a id='n12784' href='#n12784'>12784</a> <a id='n12785' href='#n12785'>12785</a> <a id='n12786' href='#n12786'>12786</a> <a id='n12787' href='#n12787'>12787</a> <a id='n12788' href='#n12788'>12788</a> <a id='n12789' href='#n12789'>12789</a> <a id='n12790' href='#n12790'>12790</a> <a id='n12791' href='#n12791'>12791</a> <a id='n12792' href='#n12792'>12792</a> <a id='n12793' href='#n12793'>12793</a> <a id='n12794' href='#n12794'>12794</a> <a id='n12795' href='#n12795'>12795</a> <a id='n12796' href='#n12796'>12796</a> <a id='n12797' href='#n12797'>12797</a> <a id='n12798' href='#n12798'>12798</a> <a id='n12799' href='#n12799'>12799</a> <a id='n12800' href='#n12800'>12800</a> <a id='n12801' href='#n12801'>12801</a> <a id='n12802' href='#n12802'>12802</a> <a id='n12803' href='#n12803'>12803</a> <a id='n12804' href='#n12804'>12804</a> <a id='n12805' href='#n12805'>12805</a> <a id='n12806' href='#n12806'>12806</a> <a id='n12807' href='#n12807'>12807</a> <a id='n12808' href='#n12808'>12808</a> <a id='n12809' href='#n12809'>12809</a> <a id='n12810' href='#n12810'>12810</a> <a id='n12811' href='#n12811'>12811</a> <a id='n12812' href='#n12812'>12812</a> <a id='n12813' href='#n12813'>12813</a> <a id='n12814' href='#n12814'>12814</a> <a id='n12815' href='#n12815'>12815</a> <a id='n12816' href='#n12816'>12816</a> <a id='n12817' href='#n12817'>12817</a> <a id='n12818' href='#n12818'>12818</a> <a id='n12819' href='#n12819'>12819</a> <a id='n12820' href='#n12820'>12820</a> <a id='n12821' href='#n12821'>12821</a> <a id='n12822' href='#n12822'>12822</a> <a id='n12823' href='#n12823'>12823</a> <a id='n12824' href='#n12824'>12824</a> <a id='n12825' href='#n12825'>12825</a> <a id='n12826' href='#n12826'>12826</a> <a id='n12827' href='#n12827'>12827</a> <a id='n12828' href='#n12828'>12828</a> <a id='n12829' href='#n12829'>12829</a> <a id='n12830' href='#n12830'>12830</a> <a id='n12831' href='#n12831'>12831</a> <a id='n12832' href='#n12832'>12832</a> <a id='n12833' href='#n12833'>12833</a> <a id='n12834' href='#n12834'>12834</a> <a id='n12835' href='#n12835'>12835</a> <a id='n12836' href='#n12836'>12836</a> <a id='n12837' href='#n12837'>12837</a> <a id='n12838' href='#n12838'>12838</a> <a id='n12839' href='#n12839'>12839</a> <a id='n12840' href='#n12840'>12840</a> <a id='n12841' href='#n12841'>12841</a> <a id='n12842' href='#n12842'>12842</a> <a id='n12843' href='#n12843'>12843</a> <a id='n12844' href='#n12844'>12844</a> <a id='n12845' href='#n12845'>12845</a> <a id='n12846' href='#n12846'>12846</a> <a id='n12847' href='#n12847'>12847</a> <a id='n12848' href='#n12848'>12848</a> <a id='n12849' href='#n12849'>12849</a> <a id='n12850' href='#n12850'>12850</a> <a id='n12851' href='#n12851'>12851</a> <a id='n12852' href='#n12852'>12852</a> <a id='n12853' href='#n12853'>12853</a> <a id='n12854' href='#n12854'>12854</a> <a id='n12855' href='#n12855'>12855</a> <a id='n12856' href='#n12856'>12856</a> <a id='n12857' href='#n12857'>12857</a> <a id='n12858' href='#n12858'>12858</a> <a id='n12859' href='#n12859'>12859</a> <a id='n12860' href='#n12860'>12860</a> <a id='n12861' href='#n12861'>12861</a> <a id='n12862' href='#n12862'>12862</a> <a id='n12863' href='#n12863'>12863</a> <a id='n12864' href='#n12864'>12864</a> <a id='n12865' href='#n12865'>12865</a> <a id='n12866' href='#n12866'>12866</a> <a id='n12867' href='#n12867'>12867</a> <a id='n12868' href='#n12868'>12868</a> <a id='n12869' href='#n12869'>12869</a> <a id='n12870' href='#n12870'>12870</a> <a id='n12871' href='#n12871'>12871</a> <a id='n12872' href='#n12872'>12872</a> <a id='n12873' href='#n12873'>12873</a> <a id='n12874' href='#n12874'>12874</a> <a id='n12875' href='#n12875'>12875</a> <a id='n12876' href='#n12876'>12876</a> <a id='n12877' href='#n12877'>12877</a> <a id='n12878' href='#n12878'>12878</a> <a id='n12879' href='#n12879'>12879</a> <a id='n12880' href='#n12880'>12880</a> <a id='n12881' href='#n12881'>12881</a> <a id='n12882' href='#n12882'>12882</a> <a id='n12883' href='#n12883'>12883</a> <a id='n12884' href='#n12884'>12884</a> <a id='n12885' href='#n12885'>12885</a> <a id='n12886' href='#n12886'>12886</a> <a id='n12887' href='#n12887'>12887</a> <a id='n12888' href='#n12888'>12888</a> <a id='n12889' href='#n12889'>12889</a> <a id='n12890' href='#n12890'>12890</a> <a id='n12891' href='#n12891'>12891</a> <a id='n12892' href='#n12892'>12892</a> <a id='n12893' href='#n12893'>12893</a> <a id='n12894' href='#n12894'>12894</a> <a id='n12895' href='#n12895'>12895</a> <a id='n12896' href='#n12896'>12896</a> <a id='n12897' href='#n12897'>12897</a> <a id='n12898' href='#n12898'>12898</a> <a id='n12899' href='#n12899'>12899</a> <a id='n12900' href='#n12900'>12900</a> <a id='n12901' href='#n12901'>12901</a> <a id='n12902' href='#n12902'>12902</a> <a id='n12903' href='#n12903'>12903</a> <a id='n12904' href='#n12904'>12904</a> <a id='n12905' href='#n12905'>12905</a> <a id='n12906' href='#n12906'>12906</a> <a id='n12907' href='#n12907'>12907</a> <a id='n12908' href='#n12908'>12908</a> <a id='n12909' href='#n12909'>12909</a> <a id='n12910' href='#n12910'>12910</a> <a id='n12911' href='#n12911'>12911</a> <a id='n12912' href='#n12912'>12912</a> <a id='n12913' href='#n12913'>12913</a> <a id='n12914' href='#n12914'>12914</a> <a id='n12915' href='#n12915'>12915</a> <a id='n12916' href='#n12916'>12916</a> <a id='n12917' href='#n12917'>12917</a> <a id='n12918' href='#n12918'>12918</a> <a id='n12919' href='#n12919'>12919</a> <a id='n12920' href='#n12920'>12920</a> <a id='n12921' href='#n12921'>12921</a> <a id='n12922' href='#n12922'>12922</a> <a id='n12923' href='#n12923'>12923</a> <a id='n12924' href='#n12924'>12924</a> <a id='n12925' href='#n12925'>12925</a> <a id='n12926' href='#n12926'>12926</a> <a id='n12927' href='#n12927'>12927</a> <a id='n12928' href='#n12928'>12928</a> <a id='n12929' href='#n12929'>12929</a> <a id='n12930' href='#n12930'>12930</a> <a id='n12931' href='#n12931'>12931</a> <a id='n12932' href='#n12932'>12932</a> <a id='n12933' href='#n12933'>12933</a> <a id='n12934' href='#n12934'>12934</a> <a id='n12935' href='#n12935'>12935</a> <a id='n12936' href='#n12936'>12936</a> <a id='n12937' href='#n12937'>12937</a> <a id='n12938' href='#n12938'>12938</a> <a id='n12939' href='#n12939'>12939</a> <a id='n12940' href='#n12940'>12940</a> <a id='n12941' href='#n12941'>12941</a> <a id='n12942' href='#n12942'>12942</a> <a id='n12943' href='#n12943'>12943</a> <a id='n12944' href='#n12944'>12944</a> <a id='n12945' href='#n12945'>12945</a> <a id='n12946' href='#n12946'>12946</a> <a id='n12947' href='#n12947'>12947</a> <a id='n12948' href='#n12948'>12948</a> <a id='n12949' href='#n12949'>12949</a> <a id='n12950' href='#n12950'>12950</a> <a id='n12951' href='#n12951'>12951</a> <a id='n12952' href='#n12952'>12952</a> <a id='n12953' href='#n12953'>12953</a> <a id='n12954' href='#n12954'>12954</a> <a id='n12955' href='#n12955'>12955</a> <a id='n12956' href='#n12956'>12956</a> <a id='n12957' href='#n12957'>12957</a> <a id='n12958' href='#n12958'>12958</a> <a id='n12959' href='#n12959'>12959</a> <a id='n12960' href='#n12960'>12960</a> <a id='n12961' href='#n12961'>12961</a> <a id='n12962' href='#n12962'>12962</a> <a id='n12963' href='#n12963'>12963</a> <a id='n12964' href='#n12964'>12964</a> <a id='n12965' href='#n12965'>12965</a> <a id='n12966' href='#n12966'>12966</a> <a id='n12967' href='#n12967'>12967</a> <a id='n12968' href='#n12968'>12968</a> <a id='n12969' href='#n12969'>12969</a> <a id='n12970' href='#n12970'>12970</a> <a id='n12971' href='#n12971'>12971</a> <a id='n12972' href='#n12972'>12972</a> <a id='n12973' href='#n12973'>12973</a> <a id='n12974' href='#n12974'>12974</a> <a id='n12975' href='#n12975'>12975</a> <a id='n12976' href='#n12976'>12976</a> <a id='n12977' href='#n12977'>12977</a> <a id='n12978' href='#n12978'>12978</a> <a id='n12979' href='#n12979'>12979</a> <a id='n12980' href='#n12980'>12980</a> <a id='n12981' href='#n12981'>12981</a> <a id='n12982' href='#n12982'>12982</a> <a id='n12983' href='#n12983'>12983</a> <a id='n12984' href='#n12984'>12984</a> <a id='n12985' href='#n12985'>12985</a> <a id='n12986' href='#n12986'>12986</a> <a id='n12987' href='#n12987'>12987</a> <a id='n12988' href='#n12988'>12988</a> <a id='n12989' href='#n12989'>12989</a> <a id='n12990' href='#n12990'>12990</a> <a id='n12991' href='#n12991'>12991</a> <a id='n12992' href='#n12992'>12992</a> <a id='n12993' href='#n12993'>12993</a> <a id='n12994' href='#n12994'>12994</a> <a id='n12995' href='#n12995'>12995</a> <a id='n12996' href='#n12996'>12996</a> <a id='n12997' href='#n12997'>12997</a> <a id='n12998' href='#n12998'>12998</a> <a id='n12999' href='#n12999'>12999</a> <a id='n13000' href='#n13000'>13000</a> <a id='n13001' href='#n13001'>13001</a> <a id='n13002' href='#n13002'>13002</a> <a id='n13003' href='#n13003'>13003</a> <a id='n13004' href='#n13004'>13004</a> <a id='n13005' href='#n13005'>13005</a> <a id='n13006' href='#n13006'>13006</a> <a id='n13007' href='#n13007'>13007</a> <a id='n13008' href='#n13008'>13008</a> <a id='n13009' href='#n13009'>13009</a> <a id='n13010' href='#n13010'>13010</a> <a id='n13011' href='#n13011'>13011</a> <a id='n13012' href='#n13012'>13012</a> <a id='n13013' href='#n13013'>13013</a> <a id='n13014' href='#n13014'>13014</a> <a id='n13015' href='#n13015'>13015</a> <a id='n13016' href='#n13016'>13016</a> <a id='n13017' href='#n13017'>13017</a> <a id='n13018' href='#n13018'>13018</a> <a id='n13019' href='#n13019'>13019</a> <a id='n13020' href='#n13020'>13020</a> <a id='n13021' href='#n13021'>13021</a> <a id='n13022' href='#n13022'>13022</a> <a id='n13023' href='#n13023'>13023</a> <a id='n13024' href='#n13024'>13024</a> <a id='n13025' href='#n13025'>13025</a> <a id='n13026' href='#n13026'>13026</a> <a id='n13027' href='#n13027'>13027</a> <a id='n13028' href='#n13028'>13028</a> <a id='n13029' href='#n13029'>13029</a> <a id='n13030' href='#n13030'>13030</a> <a id='n13031' href='#n13031'>13031</a> <a id='n13032' href='#n13032'>13032</a> <a id='n13033' href='#n13033'>13033</a> <a id='n13034' href='#n13034'>13034</a> <a id='n13035' href='#n13035'>13035</a> <a id='n13036' href='#n13036'>13036</a> <a id='n13037' href='#n13037'>13037</a> <a id='n13038' href='#n13038'>13038</a> <a id='n13039' href='#n13039'>13039</a> <a id='n13040' href='#n13040'>13040</a> <a id='n13041' href='#n13041'>13041</a> <a id='n13042' href='#n13042'>13042</a> <a id='n13043' href='#n13043'>13043</a> <a id='n13044' href='#n13044'>13044</a> <a id='n13045' href='#n13045'>13045</a> <a id='n13046' href='#n13046'>13046</a> <a id='n13047' href='#n13047'>13047</a> <a id='n13048' href='#n13048'>13048</a> <a id='n13049' href='#n13049'>13049</a> <a id='n13050' href='#n13050'>13050</a> <a id='n13051' href='#n13051'>13051</a> <a id='n13052' href='#n13052'>13052</a> <a id='n13053' href='#n13053'>13053</a> <a id='n13054' href='#n13054'>13054</a> <a id='n13055' href='#n13055'>13055</a> <a id='n13056' href='#n13056'>13056</a> <a id='n13057' href='#n13057'>13057</a> <a id='n13058' href='#n13058'>13058</a> <a id='n13059' href='#n13059'>13059</a> <a id='n13060' href='#n13060'>13060</a> <a id='n13061' href='#n13061'>13061</a> <a id='n13062' href='#n13062'>13062</a> <a id='n13063' href='#n13063'>13063</a> <a id='n13064' href='#n13064'>13064</a> <a id='n13065' href='#n13065'>13065</a> <a id='n13066' href='#n13066'>13066</a> <a id='n13067' href='#n13067'>13067</a> <a id='n13068' href='#n13068'>13068</a> <a id='n13069' href='#n13069'>13069</a> <a id='n13070' href='#n13070'>13070</a> <a id='n13071' href='#n13071'>13071</a> <a id='n13072' href='#n13072'>13072</a> <a id='n13073' href='#n13073'>13073</a> <a id='n13074' href='#n13074'>13074</a> <a id='n13075' href='#n13075'>13075</a> <a id='n13076' href='#n13076'>13076</a> <a id='n13077' href='#n13077'>13077</a> <a id='n13078' href='#n13078'>13078</a> <a id='n13079' href='#n13079'>13079</a> <a id='n13080' href='#n13080'>13080</a> <a id='n13081' href='#n13081'>13081</a> <a id='n13082' href='#n13082'>13082</a> <a id='n13083' href='#n13083'>13083</a> <a id='n13084' href='#n13084'>13084</a> <a id='n13085' href='#n13085'>13085</a> <a id='n13086' href='#n13086'>13086</a> <a id='n13087' href='#n13087'>13087</a> <a id='n13088' href='#n13088'>13088</a> <a id='n13089' href='#n13089'>13089</a> <a id='n13090' href='#n13090'>13090</a> <a id='n13091' href='#n13091'>13091</a> <a id='n13092' href='#n13092'>13092</a> <a id='n13093' href='#n13093'>13093</a> <a id='n13094' href='#n13094'>13094</a> <a id='n13095' href='#n13095'>13095</a> <a id='n13096' href='#n13096'>13096</a> <a id='n13097' href='#n13097'>13097</a> <a id='n13098' href='#n13098'>13098</a> <a id='n13099' href='#n13099'>13099</a> <a id='n13100' href='#n13100'>13100</a> <a id='n13101' href='#n13101'>13101</a> <a id='n13102' href='#n13102'>13102</a> <a id='n13103' href='#n13103'>13103</a> <a id='n13104' href='#n13104'>13104</a> <a id='n13105' href='#n13105'>13105</a> <a id='n13106' href='#n13106'>13106</a> <a id='n13107' href='#n13107'>13107</a> <a id='n13108' href='#n13108'>13108</a> <a id='n13109' href='#n13109'>13109</a> <a id='n13110' href='#n13110'>13110</a> <a id='n13111' href='#n13111'>13111</a> <a id='n13112' href='#n13112'>13112</a> <a id='n13113' href='#n13113'>13113</a> <a id='n13114' href='#n13114'>13114</a> <a id='n13115' href='#n13115'>13115</a> <a id='n13116' href='#n13116'>13116</a> <a id='n13117' href='#n13117'>13117</a> <a id='n13118' href='#n13118'>13118</a> <a id='n13119' href='#n13119'>13119</a> <a id='n13120' href='#n13120'>13120</a> <a id='n13121' href='#n13121'>13121</a> <a id='n13122' href='#n13122'>13122</a> <a id='n13123' href='#n13123'>13123</a> <a id='n13124' href='#n13124'>13124</a> <a id='n13125' href='#n13125'>13125</a> <a id='n13126' href='#n13126'>13126</a> <a id='n13127' href='#n13127'>13127</a> <a id='n13128' href='#n13128'>13128</a> <a id='n13129' href='#n13129'>13129</a> <a id='n13130' href='#n13130'>13130</a> <a id='n13131' href='#n13131'>13131</a> <a id='n13132' href='#n13132'>13132</a> <a id='n13133' href='#n13133'>13133</a> <a id='n13134' href='#n13134'>13134</a> <a id='n13135' href='#n13135'>13135</a> <a id='n13136' href='#n13136'>13136</a> <a id='n13137' href='#n13137'>13137</a> <a id='n13138' href='#n13138'>13138</a> <a id='n13139' href='#n13139'>13139</a> <a id='n13140' href='#n13140'>13140</a> <a id='n13141' href='#n13141'>13141</a> <a id='n13142' href='#n13142'>13142</a> <a id='n13143' href='#n13143'>13143</a> <a id='n13144' href='#n13144'>13144</a> <a id='n13145' href='#n13145'>13145</a> <a id='n13146' href='#n13146'>13146</a> <a id='n13147' href='#n13147'>13147</a> <a id='n13148' href='#n13148'>13148</a> <a id='n13149' href='#n13149'>13149</a> <a id='n13150' href='#n13150'>13150</a> <a id='n13151' href='#n13151'>13151</a> <a id='n13152' href='#n13152'>13152</a> <a id='n13153' href='#n13153'>13153</a> <a id='n13154' href='#n13154'>13154</a> <a id='n13155' href='#n13155'>13155</a> <a id='n13156' href='#n13156'>13156</a> <a id='n13157' href='#n13157'>13157</a> <a id='n13158' href='#n13158'>13158</a> <a id='n13159' href='#n13159'>13159</a> <a id='n13160' href='#n13160'>13160</a> <a id='n13161' href='#n13161'>13161</a> <a id='n13162' href='#n13162'>13162</a> <a id='n13163' href='#n13163'>13163</a> <a id='n13164' href='#n13164'>13164</a> <a id='n13165' href='#n13165'>13165</a> <a id='n13166' href='#n13166'>13166</a> <a id='n13167' href='#n13167'>13167</a> <a id='n13168' href='#n13168'>13168</a> <a id='n13169' href='#n13169'>13169</a> <a id='n13170' href='#n13170'>13170</a> <a id='n13171' href='#n13171'>13171</a> <a id='n13172' href='#n13172'>13172</a> <a id='n13173' href='#n13173'>13173</a> <a id='n13174' href='#n13174'>13174</a> <a id='n13175' href='#n13175'>13175</a> <a id='n13176' href='#n13176'>13176</a> <a id='n13177' href='#n13177'>13177</a> <a id='n13178' href='#n13178'>13178</a> <a id='n13179' href='#n13179'>13179</a> <a id='n13180' href='#n13180'>13180</a> <a id='n13181' href='#n13181'>13181</a> <a id='n13182' href='#n13182'>13182</a> <a id='n13183' href='#n13183'>13183</a> <a id='n13184' href='#n13184'>13184</a> <a id='n13185' href='#n13185'>13185</a> <a id='n13186' href='#n13186'>13186</a> <a id='n13187' href='#n13187'>13187</a> <a id='n13188' href='#n13188'>13188</a> <a id='n13189' href='#n13189'>13189</a> <a id='n13190' href='#n13190'>13190</a> <a id='n13191' href='#n13191'>13191</a> <a id='n13192' href='#n13192'>13192</a> <a id='n13193' href='#n13193'>13193</a> <a id='n13194' href='#n13194'>13194</a> <a id='n13195' href='#n13195'>13195</a> <a id='n13196' href='#n13196'>13196</a> <a id='n13197' href='#n13197'>13197</a> <a id='n13198' href='#n13198'>13198</a> <a id='n13199' href='#n13199'>13199</a> <a id='n13200' href='#n13200'>13200</a> <a id='n13201' href='#n13201'>13201</a> <a id='n13202' href='#n13202'>13202</a> <a id='n13203' href='#n13203'>13203</a> <a id='n13204' href='#n13204'>13204</a> <a id='n13205' href='#n13205'>13205</a> <a id='n13206' href='#n13206'>13206</a> <a id='n13207' href='#n13207'>13207</a> <a id='n13208' href='#n13208'>13208</a> <a id='n13209' href='#n13209'>13209</a> <a id='n13210' href='#n13210'>13210</a> <a id='n13211' href='#n13211'>13211</a> <a id='n13212' href='#n13212'>13212</a> <a id='n13213' href='#n13213'>13213</a> <a id='n13214' href='#n13214'>13214</a> <a id='n13215' href='#n13215'>13215</a> <a id='n13216' href='#n13216'>13216</a> <a id='n13217' href='#n13217'>13217</a> <a id='n13218' href='#n13218'>13218</a> <a id='n13219' href='#n13219'>13219</a> <a id='n13220' href='#n13220'>13220</a> <a id='n13221' href='#n13221'>13221</a> <a id='n13222' href='#n13222'>13222</a> <a id='n13223' href='#n13223'>13223</a> <a id='n13224' href='#n13224'>13224</a> <a id='n13225' href='#n13225'>13225</a> <a id='n13226' href='#n13226'>13226</a> <a id='n13227' href='#n13227'>13227</a> <a id='n13228' href='#n13228'>13228</a> <a id='n13229' href='#n13229'>13229</a> <a id='n13230' href='#n13230'>13230</a> <a id='n13231' href='#n13231'>13231</a> <a id='n13232' href='#n13232'>13232</a> <a id='n13233' href='#n13233'>13233</a> <a id='n13234' href='#n13234'>13234</a> <a id='n13235' href='#n13235'>13235</a> <a id='n13236' href='#n13236'>13236</a> <a id='n13237' href='#n13237'>13237</a> <a id='n13238' href='#n13238'>13238</a> <a id='n13239' href='#n13239'>13239</a> <a id='n13240' href='#n13240'>13240</a> <a id='n13241' href='#n13241'>13241</a> <a id='n13242' href='#n13242'>13242</a> <a id='n13243' href='#n13243'>13243</a> <a id='n13244' href='#n13244'>13244</a> <a id='n13245' href='#n13245'>13245</a> <a id='n13246' href='#n13246'>13246</a> <a id='n13247' href='#n13247'>13247</a> <a id='n13248' href='#n13248'>13248</a> <a id='n13249' href='#n13249'>13249</a> <a id='n13250' href='#n13250'>13250</a> <a id='n13251' href='#n13251'>13251</a> <a id='n13252' href='#n13252'>13252</a> <a id='n13253' href='#n13253'>13253</a> <a id='n13254' href='#n13254'>13254</a> <a id='n13255' href='#n13255'>13255</a> <a id='n13256' href='#n13256'>13256</a> <a id='n13257' href='#n13257'>13257</a> <a id='n13258' href='#n13258'>13258</a> <a id='n13259' href='#n13259'>13259</a> <a id='n13260' href='#n13260'>13260</a> <a id='n13261' href='#n13261'>13261</a> <a id='n13262' href='#n13262'>13262</a> <a id='n13263' href='#n13263'>13263</a> <a id='n13264' href='#n13264'>13264</a> <a id='n13265' href='#n13265'>13265</a> <a id='n13266' href='#n13266'>13266</a> <a id='n13267' href='#n13267'>13267</a> <a id='n13268' href='#n13268'>13268</a> <a id='n13269' href='#n13269'>13269</a> <a id='n13270' href='#n13270'>13270</a> <a id='n13271' href='#n13271'>13271</a> <a id='n13272' href='#n13272'>13272</a> <a id='n13273' href='#n13273'>13273</a> <a id='n13274' href='#n13274'>13274</a> <a id='n13275' href='#n13275'>13275</a> <a id='n13276' href='#n13276'>13276</a> <a id='n13277' href='#n13277'>13277</a> <a id='n13278' href='#n13278'>13278</a> <a id='n13279' href='#n13279'>13279</a> <a id='n13280' href='#n13280'>13280</a> <a id='n13281' href='#n13281'>13281</a> <a id='n13282' href='#n13282'>13282</a> <a id='n13283' href='#n13283'>13283</a> <a id='n13284' href='#n13284'>13284</a> <a id='n13285' href='#n13285'>13285</a> <a id='n13286' href='#n13286'>13286</a> <a id='n13287' href='#n13287'>13287</a> <a id='n13288' href='#n13288'>13288</a> <a id='n13289' href='#n13289'>13289</a> <a id='n13290' href='#n13290'>13290</a> <a id='n13291' href='#n13291'>13291</a> <a id='n13292' href='#n13292'>13292</a> <a id='n13293' href='#n13293'>13293</a> <a id='n13294' href='#n13294'>13294</a> <a id='n13295' href='#n13295'>13295</a> <a id='n13296' href='#n13296'>13296</a> <a id='n13297' href='#n13297'>13297</a> <a id='n13298' href='#n13298'>13298</a> <a id='n13299' href='#n13299'>13299</a> <a id='n13300' href='#n13300'>13300</a> <a id='n13301' href='#n13301'>13301</a> <a id='n13302' href='#n13302'>13302</a> <a id='n13303' href='#n13303'>13303</a> <a id='n13304' href='#n13304'>13304</a> <a id='n13305' href='#n13305'>13305</a> <a id='n13306' href='#n13306'>13306</a> <a id='n13307' href='#n13307'>13307</a> <a id='n13308' href='#n13308'>13308</a> <a id='n13309' href='#n13309'>13309</a> <a id='n13310' href='#n13310'>13310</a> <a id='n13311' href='#n13311'>13311</a> <a id='n13312' href='#n13312'>13312</a> <a id='n13313' href='#n13313'>13313</a> <a id='n13314' href='#n13314'>13314</a> <a id='n13315' href='#n13315'>13315</a> <a id='n13316' href='#n13316'>13316</a> <a id='n13317' href='#n13317'>13317</a> <a id='n13318' href='#n13318'>13318</a> <a id='n13319' href='#n13319'>13319</a> <a id='n13320' href='#n13320'>13320</a> <a id='n13321' href='#n13321'>13321</a> <a id='n13322' href='#n13322'>13322</a> <a id='n13323' href='#n13323'>13323</a> <a id='n13324' href='#n13324'>13324</a> <a id='n13325' href='#n13325'>13325</a> <a id='n13326' href='#n13326'>13326</a> <a id='n13327' href='#n13327'>13327</a> <a id='n13328' href='#n13328'>13328</a> <a id='n13329' href='#n13329'>13329</a> <a id='n13330' href='#n13330'>13330</a> <a id='n13331' href='#n13331'>13331</a> <a id='n13332' href='#n13332'>13332</a> <a id='n13333' href='#n13333'>13333</a> <a id='n13334' href='#n13334'>13334</a> <a id='n13335' href='#n13335'>13335</a> <a id='n13336' href='#n13336'>13336</a> <a id='n13337' href='#n13337'>13337</a> <a id='n13338' href='#n13338'>13338</a> <a id='n13339' href='#n13339'>13339</a> <a id='n13340' href='#n13340'>13340</a> <a id='n13341' href='#n13341'>13341</a> <a id='n13342' href='#n13342'>13342</a> <a id='n13343' href='#n13343'>13343</a> <a id='n13344' href='#n13344'>13344</a> <a id='n13345' href='#n13345'>13345</a> <a id='n13346' href='#n13346'>13346</a> <a id='n13347' href='#n13347'>13347</a> <a id='n13348' href='#n13348'>13348</a> <a id='n13349' href='#n13349'>13349</a> <a id='n13350' href='#n13350'>13350</a> <a id='n13351' href='#n13351'>13351</a> <a id='n13352' href='#n13352'>13352</a> <a id='n13353' href='#n13353'>13353</a> <a id='n13354' href='#n13354'>13354</a> <a id='n13355' href='#n13355'>13355</a> <a id='n13356' href='#n13356'>13356</a> <a id='n13357' href='#n13357'>13357</a> <a id='n13358' href='#n13358'>13358</a> <a id='n13359' href='#n13359'>13359</a> <a id='n13360' href='#n13360'>13360</a> <a id='n13361' href='#n13361'>13361</a> <a id='n13362' href='#n13362'>13362</a> <a id='n13363' href='#n13363'>13363</a> <a id='n13364' href='#n13364'>13364</a> <a id='n13365' href='#n13365'>13365</a> <a id='n13366' href='#n13366'>13366</a> <a id='n13367' href='#n13367'>13367</a> <a id='n13368' href='#n13368'>13368</a> <a id='n13369' href='#n13369'>13369</a> <a id='n13370' href='#n13370'>13370</a> <a id='n13371' href='#n13371'>13371</a> <a id='n13372' href='#n13372'>13372</a> <a id='n13373' href='#n13373'>13373</a> <a id='n13374' href='#n13374'>13374</a> <a id='n13375' href='#n13375'>13375</a> <a id='n13376' href='#n13376'>13376</a> <a id='n13377' href='#n13377'>13377</a> <a id='n13378' href='#n13378'>13378</a> <a id='n13379' href='#n13379'>13379</a> <a id='n13380' href='#n13380'>13380</a> <a id='n13381' href='#n13381'>13381</a> <a id='n13382' href='#n13382'>13382</a> <a id='n13383' href='#n13383'>13383</a> <a id='n13384' href='#n13384'>13384</a> <a id='n13385' href='#n13385'>13385</a> <a id='n13386' href='#n13386'>13386</a> <a id='n13387' href='#n13387'>13387</a> <a id='n13388' href='#n13388'>13388</a> <a id='n13389' href='#n13389'>13389</a> <a id='n13390' href='#n13390'>13390</a> <a id='n13391' href='#n13391'>13391</a> <a id='n13392' href='#n13392'>13392</a> <a id='n13393' href='#n13393'>13393</a> <a id='n13394' href='#n13394'>13394</a> <a id='n13395' href='#n13395'>13395</a> <a id='n13396' href='#n13396'>13396</a> <a id='n13397' href='#n13397'>13397</a> <a id='n13398' href='#n13398'>13398</a> <a id='n13399' href='#n13399'>13399</a> <a id='n13400' href='#n13400'>13400</a> <a id='n13401' href='#n13401'>13401</a> <a id='n13402' href='#n13402'>13402</a> <a id='n13403' href='#n13403'>13403</a> <a id='n13404' href='#n13404'>13404</a> <a id='n13405' href='#n13405'>13405</a> <a id='n13406' href='#n13406'>13406</a> <a id='n13407' href='#n13407'>13407</a> <a id='n13408' href='#n13408'>13408</a> <a id='n13409' href='#n13409'>13409</a> <a id='n13410' href='#n13410'>13410</a> <a id='n13411' href='#n13411'>13411</a> <a id='n13412' href='#n13412'>13412</a> <a id='n13413' href='#n13413'>13413</a> <a id='n13414' href='#n13414'>13414</a> <a id='n13415' href='#n13415'>13415</a> <a id='n13416' href='#n13416'>13416</a> <a id='n13417' href='#n13417'>13417</a> <a id='n13418' href='#n13418'>13418</a> <a id='n13419' href='#n13419'>13419</a> <a id='n13420' href='#n13420'>13420</a> <a id='n13421' href='#n13421'>13421</a> <a id='n13422' href='#n13422'>13422</a> <a id='n13423' href='#n13423'>13423</a> <a id='n13424' href='#n13424'>13424</a> <a id='n13425' href='#n13425'>13425</a> <a id='n13426' href='#n13426'>13426</a> <a id='n13427' href='#n13427'>13427</a> <a id='n13428' href='#n13428'>13428</a> <a id='n13429' href='#n13429'>13429</a> <a id='n13430' href='#n13430'>13430</a> <a id='n13431' href='#n13431'>13431</a> <a id='n13432' href='#n13432'>13432</a> <a id='n13433' href='#n13433'>13433</a> <a id='n13434' href='#n13434'>13434</a> <a id='n13435' href='#n13435'>13435</a> <a id='n13436' href='#n13436'>13436</a> <a id='n13437' href='#n13437'>13437</a> <a id='n13438' href='#n13438'>13438</a> <a id='n13439' href='#n13439'>13439</a> <a id='n13440' href='#n13440'>13440</a> <a id='n13441' href='#n13441'>13441</a> <a id='n13442' href='#n13442'>13442</a> <a id='n13443' href='#n13443'>13443</a> <a id='n13444' href='#n13444'>13444</a> <a id='n13445' href='#n13445'>13445</a> <a id='n13446' href='#n13446'>13446</a> <a id='n13447' href='#n13447'>13447</a> <a id='n13448' href='#n13448'>13448</a> <a id='n13449' href='#n13449'>13449</a> <a id='n13450' href='#n13450'>13450</a> <a id='n13451' href='#n13451'>13451</a> <a id='n13452' href='#n13452'>13452</a> <a id='n13453' href='#n13453'>13453</a> <a id='n13454' href='#n13454'>13454</a> <a id='n13455' href='#n13455'>13455</a> <a id='n13456' href='#n13456'>13456</a> <a id='n13457' href='#n13457'>13457</a> <a id='n13458' href='#n13458'>13458</a> <a id='n13459' href='#n13459'>13459</a> <a id='n13460' href='#n13460'>13460</a> <a id='n13461' href='#n13461'>13461</a> <a id='n13462' href='#n13462'>13462</a> <a id='n13463' href='#n13463'>13463</a> <a id='n13464' href='#n13464'>13464</a> <a id='n13465' href='#n13465'>13465</a> <a id='n13466' href='#n13466'>13466</a> <a id='n13467' href='#n13467'>13467</a> <a id='n13468' href='#n13468'>13468</a> <a id='n13469' href='#n13469'>13469</a> <a id='n13470' href='#n13470'>13470</a> <a id='n13471' href='#n13471'>13471</a> <a id='n13472' href='#n13472'>13472</a> <a id='n13473' href='#n13473'>13473</a> <a id='n13474' href='#n13474'>13474</a> <a id='n13475' href='#n13475'>13475</a> <a id='n13476' href='#n13476'>13476</a> <a id='n13477' href='#n13477'>13477</a> <a id='n13478' href='#n13478'>13478</a> <a id='n13479' href='#n13479'>13479</a> <a id='n13480' href='#n13480'>13480</a> <a id='n13481' href='#n13481'>13481</a> <a id='n13482' href='#n13482'>13482</a> <a id='n13483' href='#n13483'>13483</a> <a id='n13484' href='#n13484'>13484</a> <a id='n13485' href='#n13485'>13485</a> <a id='n13486' href='#n13486'>13486</a> <a id='n13487' href='#n13487'>13487</a> <a id='n13488' href='#n13488'>13488</a> <a id='n13489' href='#n13489'>13489</a> <a id='n13490' href='#n13490'>13490</a> <a id='n13491' href='#n13491'>13491</a> <a id='n13492' href='#n13492'>13492</a> <a id='n13493' href='#n13493'>13493</a> <a id='n13494' href='#n13494'>13494</a> <a id='n13495' href='#n13495'>13495</a> <a id='n13496' href='#n13496'>13496</a> <a id='n13497' href='#n13497'>13497</a> <a id='n13498' href='#n13498'>13498</a> <a id='n13499' href='#n13499'>13499</a> <a id='n13500' href='#n13500'>13500</a> <a id='n13501' href='#n13501'>13501</a> <a id='n13502' href='#n13502'>13502</a> <a id='n13503' href='#n13503'>13503</a> <a id='n13504' href='#n13504'>13504</a> <a id='n13505' href='#n13505'>13505</a> <a id='n13506' href='#n13506'>13506</a> <a id='n13507' href='#n13507'>13507</a> <a id='n13508' href='#n13508'>13508</a> <a id='n13509' href='#n13509'>13509</a> <a id='n13510' href='#n13510'>13510</a> <a id='n13511' href='#n13511'>13511</a> <a id='n13512' href='#n13512'>13512</a> <a id='n13513' href='#n13513'>13513</a> <a id='n13514' href='#n13514'>13514</a> <a id='n13515' href='#n13515'>13515</a> <a id='n13516' href='#n13516'>13516</a> <a id='n13517' href='#n13517'>13517</a> <a id='n13518' href='#n13518'>13518</a> <a id='n13519' href='#n13519'>13519</a> <a id='n13520' href='#n13520'>13520</a> <a id='n13521' href='#n13521'>13521</a> <a id='n13522' href='#n13522'>13522</a> <a id='n13523' href='#n13523'>13523</a> <a id='n13524' href='#n13524'>13524</a> <a id='n13525' href='#n13525'>13525</a> <a id='n13526' href='#n13526'>13526</a> <a id='n13527' href='#n13527'>13527</a> <a id='n13528' href='#n13528'>13528</a> <a id='n13529' href='#n13529'>13529</a> <a id='n13530' href='#n13530'>13530</a> <a id='n13531' href='#n13531'>13531</a> <a id='n13532' href='#n13532'>13532</a> <a id='n13533' href='#n13533'>13533</a> <a id='n13534' href='#n13534'>13534</a> <a id='n13535' href='#n13535'>13535</a> <a id='n13536' href='#n13536'>13536</a> <a id='n13537' href='#n13537'>13537</a> <a id='n13538' href='#n13538'>13538</a> <a id='n13539' href='#n13539'>13539</a> <a id='n13540' href='#n13540'>13540</a> <a id='n13541' href='#n13541'>13541</a> <a id='n13542' href='#n13542'>13542</a> <a id='n13543' href='#n13543'>13543</a> <a id='n13544' href='#n13544'>13544</a> <a id='n13545' href='#n13545'>13545</a> <a id='n13546' href='#n13546'>13546</a> <a id='n13547' href='#n13547'>13547</a> <a id='n13548' href='#n13548'>13548</a> <a id='n13549' href='#n13549'>13549</a> <a id='n13550' href='#n13550'>13550</a> <a id='n13551' href='#n13551'>13551</a> <a id='n13552' href='#n13552'>13552</a> <a id='n13553' href='#n13553'>13553</a> <a id='n13554' href='#n13554'>13554</a> <a id='n13555' href='#n13555'>13555</a> <a id='n13556' href='#n13556'>13556</a> <a id='n13557' href='#n13557'>13557</a> <a id='n13558' href='#n13558'>13558</a> <a id='n13559' href='#n13559'>13559</a> <a id='n13560' href='#n13560'>13560</a> <a id='n13561' href='#n13561'>13561</a> <a id='n13562' href='#n13562'>13562</a> <a id='n13563' href='#n13563'>13563</a> <a id='n13564' href='#n13564'>13564</a> <a id='n13565' href='#n13565'>13565</a> <a id='n13566' href='#n13566'>13566</a> <a id='n13567' href='#n13567'>13567</a> <a id='n13568' href='#n13568'>13568</a> <a id='n13569' href='#n13569'>13569</a> <a id='n13570' href='#n13570'>13570</a> <a id='n13571' href='#n13571'>13571</a> <a id='n13572' href='#n13572'>13572</a> <a id='n13573' href='#n13573'>13573</a> <a id='n13574' href='#n13574'>13574</a> <a id='n13575' href='#n13575'>13575</a> <a id='n13576' href='#n13576'>13576</a> <a id='n13577' href='#n13577'>13577</a> <a id='n13578' href='#n13578'>13578</a> <a id='n13579' href='#n13579'>13579</a> <a id='n13580' href='#n13580'>13580</a> <a id='n13581' href='#n13581'>13581</a> <a id='n13582' href='#n13582'>13582</a> <a id='n13583' href='#n13583'>13583</a> <a id='n13584' href='#n13584'>13584</a> <a id='n13585' href='#n13585'>13585</a> <a id='n13586' href='#n13586'>13586</a> <a id='n13587' href='#n13587'>13587</a> <a id='n13588' href='#n13588'>13588</a> <a id='n13589' href='#n13589'>13589</a> <a id='n13590' href='#n13590'>13590</a> <a id='n13591' href='#n13591'>13591</a> <a id='n13592' href='#n13592'>13592</a> <a id='n13593' href='#n13593'>13593</a> <a id='n13594' href='#n13594'>13594</a> <a id='n13595' href='#n13595'>13595</a> <a id='n13596' href='#n13596'>13596</a> <a id='n13597' href='#n13597'>13597</a> <a id='n13598' href='#n13598'>13598</a> <a id='n13599' href='#n13599'>13599</a> <a id='n13600' href='#n13600'>13600</a> <a id='n13601' href='#n13601'>13601</a> <a id='n13602' href='#n13602'>13602</a> <a id='n13603' href='#n13603'>13603</a> <a id='n13604' href='#n13604'>13604</a> <a id='n13605' href='#n13605'>13605</a> <a id='n13606' href='#n13606'>13606</a> <a id='n13607' href='#n13607'>13607</a> <a id='n13608' href='#n13608'>13608</a> <a id='n13609' href='#n13609'>13609</a> <a id='n13610' href='#n13610'>13610</a> <a id='n13611' href='#n13611'>13611</a> <a id='n13612' href='#n13612'>13612</a> <a id='n13613' href='#n13613'>13613</a> <a id='n13614' href='#n13614'>13614</a> <a id='n13615' href='#n13615'>13615</a> <a id='n13616' href='#n13616'>13616</a> <a id='n13617' href='#n13617'>13617</a> <a id='n13618' href='#n13618'>13618</a> <a id='n13619' href='#n13619'>13619</a> <a id='n13620' href='#n13620'>13620</a> <a id='n13621' href='#n13621'>13621</a> <a id='n13622' href='#n13622'>13622</a> <a id='n13623' href='#n13623'>13623</a> <a id='n13624' href='#n13624'>13624</a> <a id='n13625' href='#n13625'>13625</a> <a id='n13626' href='#n13626'>13626</a> <a id='n13627' href='#n13627'>13627</a> <a id='n13628' href='#n13628'>13628</a> <a id='n13629' href='#n13629'>13629</a> <a id='n13630' href='#n13630'>13630</a> <a id='n13631' href='#n13631'>13631</a> <a id='n13632' href='#n13632'>13632</a> <a id='n13633' href='#n13633'>13633</a> <a id='n13634' href='#n13634'>13634</a> <a id='n13635' href='#n13635'>13635</a> <a id='n13636' href='#n13636'>13636</a> <a id='n13637' href='#n13637'>13637</a> <a id='n13638' href='#n13638'>13638</a> <a id='n13639' href='#n13639'>13639</a> <a id='n13640' href='#n13640'>13640</a> <a id='n13641' href='#n13641'>13641</a> <a id='n13642' href='#n13642'>13642</a> <a id='n13643' href='#n13643'>13643</a> <a id='n13644' href='#n13644'>13644</a> <a id='n13645' href='#n13645'>13645</a> <a id='n13646' href='#n13646'>13646</a> <a id='n13647' href='#n13647'>13647</a> <a id='n13648' href='#n13648'>13648</a> <a id='n13649' href='#n13649'>13649</a> <a id='n13650' href='#n13650'>13650</a> <a id='n13651' href='#n13651'>13651</a> <a id='n13652' href='#n13652'>13652</a> <a id='n13653' href='#n13653'>13653</a> <a id='n13654' href='#n13654'>13654</a> <a id='n13655' href='#n13655'>13655</a> <a id='n13656' href='#n13656'>13656</a> <a id='n13657' href='#n13657'>13657</a> <a id='n13658' href='#n13658'>13658</a> <a id='n13659' href='#n13659'>13659</a> <a id='n13660' href='#n13660'>13660</a> <a id='n13661' href='#n13661'>13661</a> <a id='n13662' href='#n13662'>13662</a> <a id='n13663' href='#n13663'>13663</a> <a id='n13664' href='#n13664'>13664</a> <a id='n13665' href='#n13665'>13665</a> <a id='n13666' href='#n13666'>13666</a> <a id='n13667' href='#n13667'>13667</a> <a id='n13668' href='#n13668'>13668</a> <a id='n13669' href='#n13669'>13669</a> <a id='n13670' href='#n13670'>13670</a> <a id='n13671' href='#n13671'>13671</a> <a id='n13672' href='#n13672'>13672</a> <a id='n13673' href='#n13673'>13673</a> <a id='n13674' href='#n13674'>13674</a> <a id='n13675' href='#n13675'>13675</a> <a id='n13676' href='#n13676'>13676</a> <a id='n13677' href='#n13677'>13677</a> <a id='n13678' href='#n13678'>13678</a> <a id='n13679' href='#n13679'>13679</a> <a id='n13680' href='#n13680'>13680</a> <a id='n13681' href='#n13681'>13681</a> <a id='n13682' href='#n13682'>13682</a> <a id='n13683' href='#n13683'>13683</a> <a id='n13684' href='#n13684'>13684</a> <a id='n13685' href='#n13685'>13685</a> <a id='n13686' href='#n13686'>13686</a> <a id='n13687' href='#n13687'>13687</a> <a id='n13688' href='#n13688'>13688</a> <a id='n13689' href='#n13689'>13689</a> <a id='n13690' href='#n13690'>13690</a> <a id='n13691' href='#n13691'>13691</a> <a id='n13692' href='#n13692'>13692</a> <a id='n13693' href='#n13693'>13693</a> <a id='n13694' href='#n13694'>13694</a> <a id='n13695' href='#n13695'>13695</a> <a id='n13696' href='#n13696'>13696</a> <a id='n13697' href='#n13697'>13697</a> <a id='n13698' href='#n13698'>13698</a> <a id='n13699' href='#n13699'>13699</a> <a id='n13700' href='#n13700'>13700</a> <a id='n13701' href='#n13701'>13701</a> <a id='n13702' href='#n13702'>13702</a> <a id='n13703' href='#n13703'>13703</a> <a id='n13704' href='#n13704'>13704</a> <a id='n13705' href='#n13705'>13705</a> <a id='n13706' href='#n13706'>13706</a> <a id='n13707' href='#n13707'>13707</a> <a id='n13708' href='#n13708'>13708</a> <a id='n13709' href='#n13709'>13709</a> <a id='n13710' href='#n13710'>13710</a> <a id='n13711' href='#n13711'>13711</a> <a id='n13712' href='#n13712'>13712</a> <a id='n13713' href='#n13713'>13713</a> <a id='n13714' href='#n13714'>13714</a> <a id='n13715' href='#n13715'>13715</a> <a id='n13716' href='#n13716'>13716</a> <a id='n13717' href='#n13717'>13717</a> <a id='n13718' href='#n13718'>13718</a> <a id='n13719' href='#n13719'>13719</a> <a id='n13720' href='#n13720'>13720</a> <a id='n13721' href='#n13721'>13721</a> <a id='n13722' href='#n13722'>13722</a> <a id='n13723' href='#n13723'>13723</a> <a id='n13724' href='#n13724'>13724</a> <a id='n13725' href='#n13725'>13725</a> <a id='n13726' href='#n13726'>13726</a> <a id='n13727' href='#n13727'>13727</a> <a id='n13728' href='#n13728'>13728</a> <a id='n13729' href='#n13729'>13729</a> <a id='n13730' href='#n13730'>13730</a> <a id='n13731' href='#n13731'>13731</a> <a id='n13732' href='#n13732'>13732</a> <a id='n13733' href='#n13733'>13733</a> <a id='n13734' href='#n13734'>13734</a> <a id='n13735' href='#n13735'>13735</a> <a id='n13736' href='#n13736'>13736</a> <a id='n13737' href='#n13737'>13737</a> <a id='n13738' href='#n13738'>13738</a> <a id='n13739' href='#n13739'>13739</a> <a id='n13740' href='#n13740'>13740</a> <a id='n13741' href='#n13741'>13741</a> <a id='n13742' href='#n13742'>13742</a> <a id='n13743' href='#n13743'>13743</a> <a id='n13744' href='#n13744'>13744</a> <a id='n13745' href='#n13745'>13745</a> <a id='n13746' href='#n13746'>13746</a> <a id='n13747' href='#n13747'>13747</a> <a id='n13748' href='#n13748'>13748</a> <a id='n13749' href='#n13749'>13749</a> <a id='n13750' href='#n13750'>13750</a> <a id='n13751' href='#n13751'>13751</a> <a id='n13752' href='#n13752'>13752</a> <a id='n13753' href='#n13753'>13753</a> <a id='n13754' href='#n13754'>13754</a> <a id='n13755' href='#n13755'>13755</a> <a id='n13756' href='#n13756'>13756</a> <a id='n13757' href='#n13757'>13757</a> <a id='n13758' href='#n13758'>13758</a> <a id='n13759' href='#n13759'>13759</a> <a id='n13760' href='#n13760'>13760</a> <a id='n13761' href='#n13761'>13761</a> <a id='n13762' href='#n13762'>13762</a> <a id='n13763' href='#n13763'>13763</a> <a id='n13764' href='#n13764'>13764</a> <a id='n13765' href='#n13765'>13765</a> <a id='n13766' href='#n13766'>13766</a> <a id='n13767' href='#n13767'>13767</a> <a id='n13768' href='#n13768'>13768</a> <a id='n13769' href='#n13769'>13769</a> <a id='n13770' href='#n13770'>13770</a> <a id='n13771' href='#n13771'>13771</a> <a id='n13772' href='#n13772'>13772</a> <a id='n13773' href='#n13773'>13773</a> <a id='n13774' href='#n13774'>13774</a> <a id='n13775' href='#n13775'>13775</a> <a id='n13776' href='#n13776'>13776</a> <a id='n13777' href='#n13777'>13777</a> <a id='n13778' href='#n13778'>13778</a> <a id='n13779' href='#n13779'>13779</a> <a id='n13780' href='#n13780'>13780</a> <a id='n13781' href='#n13781'>13781</a> <a id='n13782' href='#n13782'>13782</a> <a id='n13783' href='#n13783'>13783</a> <a id='n13784' href='#n13784'>13784</a> <a id='n13785' href='#n13785'>13785</a> <a id='n13786' href='#n13786'>13786</a> <a id='n13787' href='#n13787'>13787</a> <a id='n13788' href='#n13788'>13788</a> <a id='n13789' href='#n13789'>13789</a> <a id='n13790' href='#n13790'>13790</a> <a id='n13791' href='#n13791'>13791</a> <a id='n13792' href='#n13792'>13792</a> <a id='n13793' href='#n13793'>13793</a> <a id='n13794' href='#n13794'>13794</a> <a id='n13795' href='#n13795'>13795</a> <a id='n13796' href='#n13796'>13796</a> <a id='n13797' href='#n13797'>13797</a> <a id='n13798' href='#n13798'>13798</a> <a id='n13799' href='#n13799'>13799</a> <a id='n13800' href='#n13800'>13800</a> <a id='n13801' href='#n13801'>13801</a> <a id='n13802' href='#n13802'>13802</a> <a id='n13803' href='#n13803'>13803</a> <a id='n13804' href='#n13804'>13804</a> <a id='n13805' href='#n13805'>13805</a> <a id='n13806' href='#n13806'>13806</a> <a id='n13807' href='#n13807'>13807</a> <a id='n13808' href='#n13808'>13808</a> <a id='n13809' href='#n13809'>13809</a> <a id='n13810' href='#n13810'>13810</a> <a id='n13811' href='#n13811'>13811</a> <a id='n13812' href='#n13812'>13812</a> <a id='n13813' href='#n13813'>13813</a> <a id='n13814' href='#n13814'>13814</a> <a id='n13815' href='#n13815'>13815</a> <a id='n13816' href='#n13816'>13816</a> <a id='n13817' href='#n13817'>13817</a> <a id='n13818' href='#n13818'>13818</a> <a id='n13819' href='#n13819'>13819</a> <a id='n13820' href='#n13820'>13820</a> <a id='n13821' href='#n13821'>13821</a> <a id='n13822' href='#n13822'>13822</a> <a id='n13823' href='#n13823'>13823</a> <a id='n13824' href='#n13824'>13824</a> <a id='n13825' href='#n13825'>13825</a> <a id='n13826' href='#n13826'>13826</a> <a id='n13827' href='#n13827'>13827</a> <a id='n13828' href='#n13828'>13828</a> <a id='n13829' href='#n13829'>13829</a> <a id='n13830' href='#n13830'>13830</a> <a id='n13831' href='#n13831'>13831</a> <a id='n13832' href='#n13832'>13832</a> <a id='n13833' href='#n13833'>13833</a> <a id='n13834' href='#n13834'>13834</a> <a id='n13835' href='#n13835'>13835</a> <a id='n13836' href='#n13836'>13836</a> <a id='n13837' href='#n13837'>13837</a> <a id='n13838' href='#n13838'>13838</a> <a id='n13839' href='#n13839'>13839</a> <a id='n13840' href='#n13840'>13840</a> <a id='n13841' href='#n13841'>13841</a> <a id='n13842' href='#n13842'>13842</a> <a id='n13843' href='#n13843'>13843</a> <a id='n13844' href='#n13844'>13844</a> <a id='n13845' href='#n13845'>13845</a> <a id='n13846' href='#n13846'>13846</a> <a id='n13847' href='#n13847'>13847</a> <a id='n13848' href='#n13848'>13848</a> <a id='n13849' href='#n13849'>13849</a> <a id='n13850' href='#n13850'>13850</a> <a id='n13851' href='#n13851'>13851</a> <a id='n13852' href='#n13852'>13852</a> <a id='n13853' href='#n13853'>13853</a> <a id='n13854' href='#n13854'>13854</a> <a id='n13855' href='#n13855'>13855</a> <a id='n13856' href='#n13856'>13856</a> <a id='n13857' href='#n13857'>13857</a> <a id='n13858' href='#n13858'>13858</a> <a id='n13859' href='#n13859'>13859</a> <a id='n13860' href='#n13860'>13860</a> <a id='n13861' href='#n13861'>13861</a> <a id='n13862' href='#n13862'>13862</a> <a id='n13863' href='#n13863'>13863</a> <a id='n13864' href='#n13864'>13864</a> <a id='n13865' href='#n13865'>13865</a> <a id='n13866' href='#n13866'>13866</a> <a id='n13867' href='#n13867'>13867</a> <a id='n13868' href='#n13868'>13868</a> <a id='n13869' href='#n13869'>13869</a> <a id='n13870' href='#n13870'>13870</a> <a id='n13871' href='#n13871'>13871</a> <a id='n13872' href='#n13872'>13872</a> <a id='n13873' href='#n13873'>13873</a> <a id='n13874' href='#n13874'>13874</a> <a id='n13875' href='#n13875'>13875</a> <a id='n13876' href='#n13876'>13876</a> <a id='n13877' href='#n13877'>13877</a> <a id='n13878' href='#n13878'>13878</a> <a id='n13879' href='#n13879'>13879</a> <a id='n13880' href='#n13880'>13880</a> <a id='n13881' href='#n13881'>13881</a> <a id='n13882' href='#n13882'>13882</a> <a id='n13883' href='#n13883'>13883</a> <a id='n13884' href='#n13884'>13884</a> <a id='n13885' href='#n13885'>13885</a> <a id='n13886' href='#n13886'>13886</a> <a id='n13887' href='#n13887'>13887</a> <a id='n13888' href='#n13888'>13888</a> <a id='n13889' href='#n13889'>13889</a> <a id='n13890' href='#n13890'>13890</a> <a id='n13891' href='#n13891'>13891</a> <a id='n13892' href='#n13892'>13892</a> <a id='n13893' href='#n13893'>13893</a> <a id='n13894' href='#n13894'>13894</a> <a id='n13895' href='#n13895'>13895</a> <a id='n13896' href='#n13896'>13896</a> <a id='n13897' href='#n13897'>13897</a> <a id='n13898' href='#n13898'>13898</a> <a id='n13899' href='#n13899'>13899</a> <a id='n13900' href='#n13900'>13900</a> <a id='n13901' href='#n13901'>13901</a> <a id='n13902' href='#n13902'>13902</a> <a id='n13903' href='#n13903'>13903</a> <a id='n13904' href='#n13904'>13904</a> <a id='n13905' href='#n13905'>13905</a> <a id='n13906' href='#n13906'>13906</a> <a id='n13907' href='#n13907'>13907</a> <a id='n13908' href='#n13908'>13908</a> <a id='n13909' href='#n13909'>13909</a> <a id='n13910' href='#n13910'>13910</a> <a id='n13911' href='#n13911'>13911</a> <a id='n13912' href='#n13912'>13912</a> <a id='n13913' href='#n13913'>13913</a> <a id='n13914' href='#n13914'>13914</a> <a id='n13915' href='#n13915'>13915</a> <a id='n13916' href='#n13916'>13916</a> <a id='n13917' href='#n13917'>13917</a> <a id='n13918' href='#n13918'>13918</a> <a id='n13919' href='#n13919'>13919</a> <a id='n13920' href='#n13920'>13920</a> <a id='n13921' href='#n13921'>13921</a> <a id='n13922' href='#n13922'>13922</a> <a id='n13923' href='#n13923'>13923</a> <a id='n13924' href='#n13924'>13924</a> <a id='n13925' href='#n13925'>13925</a> <a id='n13926' href='#n13926'>13926</a> <a id='n13927' href='#n13927'>13927</a> <a id='n13928' href='#n13928'>13928</a> <a id='n13929' href='#n13929'>13929</a> <a id='n13930' href='#n13930'>13930</a> <a id='n13931' href='#n13931'>13931</a> <a id='n13932' href='#n13932'>13932</a> <a id='n13933' href='#n13933'>13933</a> <a id='n13934' href='#n13934'>13934</a> <a id='n13935' href='#n13935'>13935</a> <a id='n13936' href='#n13936'>13936</a> <a id='n13937' href='#n13937'>13937</a> <a id='n13938' href='#n13938'>13938</a> <a id='n13939' href='#n13939'>13939</a> <a id='n13940' href='#n13940'>13940</a> <a id='n13941' href='#n13941'>13941</a> <a id='n13942' href='#n13942'>13942</a> <a id='n13943' href='#n13943'>13943</a> <a id='n13944' href='#n13944'>13944</a> <a id='n13945' href='#n13945'>13945</a> <a id='n13946' href='#n13946'>13946</a> <a id='n13947' href='#n13947'>13947</a> <a id='n13948' href='#n13948'>13948</a> <a id='n13949' href='#n13949'>13949</a> <a id='n13950' href='#n13950'>13950</a> <a id='n13951' href='#n13951'>13951</a> <a id='n13952' href='#n13952'>13952</a> <a id='n13953' href='#n13953'>13953</a> <a id='n13954' href='#n13954'>13954</a> <a id='n13955' href='#n13955'>13955</a> <a id='n13956' href='#n13956'>13956</a> <a id='n13957' href='#n13957'>13957</a> <a id='n13958' href='#n13958'>13958</a> <a id='n13959' href='#n13959'>13959</a> <a id='n13960' href='#n13960'>13960</a> <a id='n13961' href='#n13961'>13961</a> <a id='n13962' href='#n13962'>13962</a> <a id='n13963' href='#n13963'>13963</a> <a id='n13964' href='#n13964'>13964</a> <a id='n13965' href='#n13965'>13965</a> <a id='n13966' href='#n13966'>13966</a> <a id='n13967' href='#n13967'>13967</a> <a id='n13968' href='#n13968'>13968</a> <a id='n13969' href='#n13969'>13969</a> <a id='n13970' href='#n13970'>13970</a> <a id='n13971' href='#n13971'>13971</a> <a id='n13972' href='#n13972'>13972</a> <a id='n13973' href='#n13973'>13973</a> <a id='n13974' href='#n13974'>13974</a> <a id='n13975' href='#n13975'>13975</a> <a id='n13976' href='#n13976'>13976</a> <a id='n13977' href='#n13977'>13977</a> <a id='n13978' href='#n13978'>13978</a> <a id='n13979' href='#n13979'>13979</a> <a id='n13980' href='#n13980'>13980</a> <a id='n13981' href='#n13981'>13981</a> <a id='n13982' href='#n13982'>13982</a> <a id='n13983' href='#n13983'>13983</a> <a id='n13984' href='#n13984'>13984</a> <a id='n13985' href='#n13985'>13985</a> <a id='n13986' href='#n13986'>13986</a> <a id='n13987' href='#n13987'>13987</a> <a id='n13988' href='#n13988'>13988</a> <a id='n13989' href='#n13989'>13989</a> <a id='n13990' href='#n13990'>13990</a> <a id='n13991' href='#n13991'>13991</a> <a id='n13992' href='#n13992'>13992</a> <a id='n13993' href='#n13993'>13993</a> <a id='n13994' href='#n13994'>13994</a> <a id='n13995' href='#n13995'>13995</a> <a id='n13996' href='#n13996'>13996</a> <a id='n13997' href='#n13997'>13997</a> <a id='n13998' href='#n13998'>13998</a> <a id='n13999' href='#n13999'>13999</a> <a id='n14000' href='#n14000'>14000</a> <a id='n14001' href='#n14001'>14001</a> <a id='n14002' href='#n14002'>14002</a> <a id='n14003' href='#n14003'>14003</a> <a id='n14004' href='#n14004'>14004</a> <a id='n14005' href='#n14005'>14005</a> <a id='n14006' href='#n14006'>14006</a> <a id='n14007' href='#n14007'>14007</a> <a id='n14008' href='#n14008'>14008</a> <a id='n14009' href='#n14009'>14009</a> <a id='n14010' href='#n14010'>14010</a> <a id='n14011' href='#n14011'>14011</a> <a id='n14012' href='#n14012'>14012</a> <a id='n14013' href='#n14013'>14013</a> <a id='n14014' href='#n14014'>14014</a> <a id='n14015' href='#n14015'>14015</a> <a id='n14016' href='#n14016'>14016</a> <a id='n14017' href='#n14017'>14017</a> <a id='n14018' href='#n14018'>14018</a> <a id='n14019' href='#n14019'>14019</a> <a id='n14020' href='#n14020'>14020</a> <a id='n14021' href='#n14021'>14021</a> <a id='n14022' href='#n14022'>14022</a> <a id='n14023' href='#n14023'>14023</a> <a id='n14024' href='#n14024'>14024</a> <a id='n14025' href='#n14025'>14025</a> <a id='n14026' href='#n14026'>14026</a> <a id='n14027' href='#n14027'>14027</a> <a id='n14028' href='#n14028'>14028</a> <a id='n14029' href='#n14029'>14029</a> <a id='n14030' href='#n14030'>14030</a> <a id='n14031' href='#n14031'>14031</a> <a id='n14032' href='#n14032'>14032</a> <a id='n14033' href='#n14033'>14033</a> <a id='n14034' href='#n14034'>14034</a> <a id='n14035' href='#n14035'>14035</a> <a id='n14036' href='#n14036'>14036</a> <a id='n14037' href='#n14037'>14037</a> <a id='n14038' href='#n14038'>14038</a> <a id='n14039' href='#n14039'>14039</a> <a id='n14040' href='#n14040'>14040</a> <a id='n14041' href='#n14041'>14041</a> <a id='n14042' href='#n14042'>14042</a> <a id='n14043' href='#n14043'>14043</a> <a id='n14044' href='#n14044'>14044</a> <a id='n14045' href='#n14045'>14045</a> <a id='n14046' href='#n14046'>14046</a> <a id='n14047' href='#n14047'>14047</a> <a id='n14048' href='#n14048'>14048</a> <a id='n14049' href='#n14049'>14049</a> <a id='n14050' href='#n14050'>14050</a> <a id='n14051' href='#n14051'>14051</a> <a id='n14052' href='#n14052'>14052</a> <a id='n14053' href='#n14053'>14053</a> <a id='n14054' href='#n14054'>14054</a> <a id='n14055' href='#n14055'>14055</a> <a id='n14056' href='#n14056'>14056</a> <a id='n14057' href='#n14057'>14057</a> <a id='n14058' href='#n14058'>14058</a> <a id='n14059' href='#n14059'>14059</a> <a id='n14060' href='#n14060'>14060</a> <a id='n14061' href='#n14061'>14061</a> <a id='n14062' href='#n14062'>14062</a> <a id='n14063' href='#n14063'>14063</a> <a id='n14064' href='#n14064'>14064</a> <a id='n14065' href='#n14065'>14065</a> <a id='n14066' href='#n14066'>14066</a> <a id='n14067' href='#n14067'>14067</a> <a id='n14068' href='#n14068'>14068</a> <a id='n14069' href='#n14069'>14069</a> <a id='n14070' href='#n14070'>14070</a> <a id='n14071' href='#n14071'>14071</a> <a id='n14072' href='#n14072'>14072</a> <a id='n14073' href='#n14073'>14073</a> <a id='n14074' href='#n14074'>14074</a> <a id='n14075' href='#n14075'>14075</a> <a id='n14076' href='#n14076'>14076</a> <a id='n14077' href='#n14077'>14077</a> <a id='n14078' href='#n14078'>14078</a> <a id='n14079' href='#n14079'>14079</a> <a id='n14080' href='#n14080'>14080</a> <a id='n14081' href='#n14081'>14081</a> <a id='n14082' href='#n14082'>14082</a> <a id='n14083' href='#n14083'>14083</a> <a id='n14084' href='#n14084'>14084</a> <a id='n14085' href='#n14085'>14085</a> <a id='n14086' href='#n14086'>14086</a> <a id='n14087' href='#n14087'>14087</a> <a id='n14088' href='#n14088'>14088</a> <a id='n14089' href='#n14089'>14089</a> <a id='n14090' href='#n14090'>14090</a> <a id='n14091' href='#n14091'>14091</a> <a id='n14092' href='#n14092'>14092</a> <a id='n14093' href='#n14093'>14093</a> <a id='n14094' href='#n14094'>14094</a> <a id='n14095' href='#n14095'>14095</a> <a id='n14096' href='#n14096'>14096</a> <a id='n14097' href='#n14097'>14097</a> <a id='n14098' href='#n14098'>14098</a> <a id='n14099' href='#n14099'>14099</a> <a id='n14100' href='#n14100'>14100</a> <a id='n14101' href='#n14101'>14101</a> <a id='n14102' href='#n14102'>14102</a> <a id='n14103' href='#n14103'>14103</a> <a id='n14104' href='#n14104'>14104</a> <a id='n14105' href='#n14105'>14105</a> <a id='n14106' href='#n14106'>14106</a> <a id='n14107' href='#n14107'>14107</a> <a id='n14108' href='#n14108'>14108</a> <a id='n14109' href='#n14109'>14109</a> <a id='n14110' href='#n14110'>14110</a> <a id='n14111' href='#n14111'>14111</a> <a id='n14112' href='#n14112'>14112</a> <a id='n14113' href='#n14113'>14113</a> <a id='n14114' href='#n14114'>14114</a> <a id='n14115' href='#n14115'>14115</a> <a id='n14116' href='#n14116'>14116</a> <a id='n14117' href='#n14117'>14117</a> <a id='n14118' href='#n14118'>14118</a> <a id='n14119' href='#n14119'>14119</a> <a id='n14120' href='#n14120'>14120</a> <a id='n14121' href='#n14121'>14121</a> <a id='n14122' href='#n14122'>14122</a> <a id='n14123' href='#n14123'>14123</a> <a id='n14124' href='#n14124'>14124</a> <a id='n14125' href='#n14125'>14125</a> <a id='n14126' href='#n14126'>14126</a> <a id='n14127' href='#n14127'>14127</a> <a id='n14128' href='#n14128'>14128</a> <a id='n14129' href='#n14129'>14129</a> <a id='n14130' href='#n14130'>14130</a> <a id='n14131' href='#n14131'>14131</a> <a id='n14132' href='#n14132'>14132</a> <a id='n14133' href='#n14133'>14133</a> <a id='n14134' href='#n14134'>14134</a> <a id='n14135' href='#n14135'>14135</a> <a id='n14136' href='#n14136'>14136</a> <a id='n14137' href='#n14137'>14137</a> <a id='n14138' href='#n14138'>14138</a> <a id='n14139' href='#n14139'>14139</a> <a id='n14140' href='#n14140'>14140</a> <a id='n14141' href='#n14141'>14141</a> <a id='n14142' href='#n14142'>14142</a> <a id='n14143' href='#n14143'>14143</a> <a id='n14144' href='#n14144'>14144</a> <a id='n14145' href='#n14145'>14145</a> <a id='n14146' href='#n14146'>14146</a> <a id='n14147' href='#n14147'>14147</a> <a id='n14148' href='#n14148'>14148</a> <a id='n14149' href='#n14149'>14149</a> <a id='n14150' href='#n14150'>14150</a> <a id='n14151' href='#n14151'>14151</a> <a id='n14152' href='#n14152'>14152</a> <a id='n14153' href='#n14153'>14153</a> <a id='n14154' href='#n14154'>14154</a> <a id='n14155' href='#n14155'>14155</a> <a id='n14156' href='#n14156'>14156</a> <a id='n14157' href='#n14157'>14157</a> <a id='n14158' href='#n14158'>14158</a> <a id='n14159' href='#n14159'>14159</a> <a id='n14160' href='#n14160'>14160</a> <a id='n14161' href='#n14161'>14161</a> <a id='n14162' href='#n14162'>14162</a> <a id='n14163' href='#n14163'>14163</a> <a id='n14164' href='#n14164'>14164</a> <a id='n14165' href='#n14165'>14165</a> <a id='n14166' href='#n14166'>14166</a> <a id='n14167' href='#n14167'>14167</a> <a id='n14168' href='#n14168'>14168</a> <a id='n14169' href='#n14169'>14169</a> <a id='n14170' href='#n14170'>14170</a> <a id='n14171' href='#n14171'>14171</a> <a id='n14172' href='#n14172'>14172</a> <a id='n14173' href='#n14173'>14173</a> <a id='n14174' href='#n14174'>14174</a> <a id='n14175' href='#n14175'>14175</a> <a id='n14176' href='#n14176'>14176</a> <a id='n14177' href='#n14177'>14177</a> <a id='n14178' href='#n14178'>14178</a> <a id='n14179' href='#n14179'>14179</a> <a id='n14180' href='#n14180'>14180</a> <a id='n14181' href='#n14181'>14181</a> <a id='n14182' href='#n14182'>14182</a> <a id='n14183' href='#n14183'>14183</a> <a id='n14184' href='#n14184'>14184</a> <a id='n14185' href='#n14185'>14185</a> <a id='n14186' href='#n14186'>14186</a> <a id='n14187' href='#n14187'>14187</a> <a id='n14188' href='#n14188'>14188</a> <a id='n14189' href='#n14189'>14189</a> <a id='n14190' href='#n14190'>14190</a> <a id='n14191' href='#n14191'>14191</a> <a id='n14192' href='#n14192'>14192</a> <a id='n14193' href='#n14193'>14193</a> <a id='n14194' href='#n14194'>14194</a> <a id='n14195' href='#n14195'>14195</a> <a id='n14196' href='#n14196'>14196</a> <a id='n14197' href='#n14197'>14197</a> <a id='n14198' href='#n14198'>14198</a> <a id='n14199' href='#n14199'>14199</a> <a id='n14200' href='#n14200'>14200</a> <a id='n14201' href='#n14201'>14201</a> <a id='n14202' href='#n14202'>14202</a> <a id='n14203' href='#n14203'>14203</a> <a id='n14204' href='#n14204'>14204</a> <a id='n14205' href='#n14205'>14205</a> <a id='n14206' href='#n14206'>14206</a> <a id='n14207' href='#n14207'>14207</a> <a id='n14208' href='#n14208'>14208</a> <a id='n14209' href='#n14209'>14209</a> <a id='n14210' href='#n14210'>14210</a> <a id='n14211' href='#n14211'>14211</a> <a id='n14212' href='#n14212'>14212</a> <a id='n14213' href='#n14213'>14213</a> <a id='n14214' href='#n14214'>14214</a> <a id='n14215' href='#n14215'>14215</a> <a id='n14216' href='#n14216'>14216</a> <a id='n14217' href='#n14217'>14217</a> <a id='n14218' href='#n14218'>14218</a> <a id='n14219' href='#n14219'>14219</a> <a id='n14220' href='#n14220'>14220</a> <a id='n14221' href='#n14221'>14221</a> <a id='n14222' href='#n14222'>14222</a> <a id='n14223' href='#n14223'>14223</a> <a id='n14224' href='#n14224'>14224</a> <a id='n14225' href='#n14225'>14225</a> <a id='n14226' href='#n14226'>14226</a> <a id='n14227' href='#n14227'>14227</a> <a id='n14228' href='#n14228'>14228</a> <a id='n14229' href='#n14229'>14229</a> <a id='n14230' href='#n14230'>14230</a> <a id='n14231' href='#n14231'>14231</a> <a id='n14232' href='#n14232'>14232</a> <a id='n14233' href='#n14233'>14233</a> <a id='n14234' href='#n14234'>14234</a> <a id='n14235' href='#n14235'>14235</a> <a id='n14236' href='#n14236'>14236</a> <a id='n14237' href='#n14237'>14237</a> <a id='n14238' href='#n14238'>14238</a> <a id='n14239' href='#n14239'>14239</a> <a id='n14240' href='#n14240'>14240</a> <a id='n14241' href='#n14241'>14241</a> <a id='n14242' href='#n14242'>14242</a> <a id='n14243' href='#n14243'>14243</a> <a id='n14244' href='#n14244'>14244</a> <a id='n14245' href='#n14245'>14245</a> <a id='n14246' href='#n14246'>14246</a> <a id='n14247' href='#n14247'>14247</a> <a id='n14248' href='#n14248'>14248</a> <a id='n14249' href='#n14249'>14249</a> <a id='n14250' href='#n14250'>14250</a> <a id='n14251' href='#n14251'>14251</a> <a id='n14252' href='#n14252'>14252</a> <a id='n14253' href='#n14253'>14253</a> <a id='n14254' href='#n14254'>14254</a> <a id='n14255' href='#n14255'>14255</a> <a id='n14256' href='#n14256'>14256</a> <a id='n14257' href='#n14257'>14257</a> <a id='n14258' href='#n14258'>14258</a> <a id='n14259' href='#n14259'>14259</a> <a id='n14260' href='#n14260'>14260</a> <a id='n14261' href='#n14261'>14261</a> <a id='n14262' href='#n14262'>14262</a> <a id='n14263' href='#n14263'>14263</a> <a id='n14264' href='#n14264'>14264</a> <a id='n14265' href='#n14265'>14265</a> <a id='n14266' href='#n14266'>14266</a> <a id='n14267' href='#n14267'>14267</a> <a id='n14268' href='#n14268'>14268</a> <a id='n14269' href='#n14269'>14269</a> <a id='n14270' href='#n14270'>14270</a> <a id='n14271' href='#n14271'>14271</a> <a id='n14272' href='#n14272'>14272</a> <a id='n14273' href='#n14273'>14273</a> <a id='n14274' href='#n14274'>14274</a> <a id='n14275' href='#n14275'>14275</a> <a id='n14276' href='#n14276'>14276</a> <a id='n14277' href='#n14277'>14277</a> <a id='n14278' href='#n14278'>14278</a> <a id='n14279' href='#n14279'>14279</a> <a id='n14280' href='#n14280'>14280</a> <a id='n14281' href='#n14281'>14281</a> <a id='n14282' href='#n14282'>14282</a> <a id='n14283' href='#n14283'>14283</a> <a id='n14284' href='#n14284'>14284</a> <a id='n14285' href='#n14285'>14285</a> <a id='n14286' href='#n14286'>14286</a> <a id='n14287' href='#n14287'>14287</a> <a id='n14288' href='#n14288'>14288</a> <a id='n14289' href='#n14289'>14289</a> <a id='n14290' href='#n14290'>14290</a> <a id='n14291' href='#n14291'>14291</a> <a id='n14292' href='#n14292'>14292</a> <a id='n14293' href='#n14293'>14293</a> <a id='n14294' href='#n14294'>14294</a> <a id='n14295' href='#n14295'>14295</a> <a id='n14296' href='#n14296'>14296</a> <a id='n14297' href='#n14297'>14297</a> <a id='n14298' href='#n14298'>14298</a> <a id='n14299' href='#n14299'>14299</a> <a id='n14300' href='#n14300'>14300</a> <a id='n14301' href='#n14301'>14301</a> <a id='n14302' href='#n14302'>14302</a> <a id='n14303' href='#n14303'>14303</a> <a id='n14304' href='#n14304'>14304</a> <a id='n14305' href='#n14305'>14305</a> <a id='n14306' href='#n14306'>14306</a> <a id='n14307' href='#n14307'>14307</a> <a id='n14308' href='#n14308'>14308</a> <a id='n14309' href='#n14309'>14309</a> <a id='n14310' href='#n14310'>14310</a> <a id='n14311' href='#n14311'>14311</a> <a id='n14312' href='#n14312'>14312</a> <a id='n14313' href='#n14313'>14313</a> <a id='n14314' href='#n14314'>14314</a> <a id='n14315' href='#n14315'>14315</a> <a id='n14316' href='#n14316'>14316</a> <a id='n14317' href='#n14317'>14317</a> <a id='n14318' href='#n14318'>14318</a> <a id='n14319' href='#n14319'>14319</a> <a id='n14320' href='#n14320'>14320</a> <a id='n14321' href='#n14321'>14321</a> <a id='n14322' href='#n14322'>14322</a> <a id='n14323' href='#n14323'>14323</a> <a id='n14324' href='#n14324'>14324</a> <a id='n14325' href='#n14325'>14325</a> <a id='n14326' href='#n14326'>14326</a> <a id='n14327' href='#n14327'>14327</a> <a id='n14328' href='#n14328'>14328</a> <a id='n14329' href='#n14329'>14329</a> <a id='n14330' href='#n14330'>14330</a> <a id='n14331' href='#n14331'>14331</a> <a id='n14332' href='#n14332'>14332</a> <a id='n14333' href='#n14333'>14333</a> <a id='n14334' href='#n14334'>14334</a> <a id='n14335' href='#n14335'>14335</a> <a id='n14336' href='#n14336'>14336</a> <a id='n14337' href='#n14337'>14337</a> <a id='n14338' href='#n14338'>14338</a> <a id='n14339' href='#n14339'>14339</a> <a id='n14340' href='#n14340'>14340</a> <a id='n14341' href='#n14341'>14341</a> <a id='n14342' href='#n14342'>14342</a> <a id='n14343' href='#n14343'>14343</a> <a id='n14344' href='#n14344'>14344</a> <a id='n14345' href='#n14345'>14345</a> <a id='n14346' href='#n14346'>14346</a> <a id='n14347' href='#n14347'>14347</a> <a id='n14348' href='#n14348'>14348</a> <a id='n14349' href='#n14349'>14349</a> <a id='n14350' href='#n14350'>14350</a> <a id='n14351' href='#n14351'>14351</a> <a id='n14352' href='#n14352'>14352</a> <a id='n14353' href='#n14353'>14353</a> <a id='n14354' href='#n14354'>14354</a> <a id='n14355' href='#n14355'>14355</a> <a id='n14356' href='#n14356'>14356</a> <a id='n14357' href='#n14357'>14357</a> <a id='n14358' href='#n14358'>14358</a> <a id='n14359' href='#n14359'>14359</a> <a id='n14360' href='#n14360'>14360</a> <a id='n14361' href='#n14361'>14361</a> <a id='n14362' href='#n14362'>14362</a> <a id='n14363' href='#n14363'>14363</a> <a id='n14364' href='#n14364'>14364</a> <a id='n14365' href='#n14365'>14365</a> <a id='n14366' href='#n14366'>14366</a> <a id='n14367' href='#n14367'>14367</a> <a id='n14368' href='#n14368'>14368</a> <a id='n14369' href='#n14369'>14369</a> <a id='n14370' href='#n14370'>14370</a> <a id='n14371' href='#n14371'>14371</a> <a id='n14372' href='#n14372'>14372</a> <a id='n14373' href='#n14373'>14373</a> <a id='n14374' href='#n14374'>14374</a> <a id='n14375' href='#n14375'>14375</a> <a id='n14376' href='#n14376'>14376</a> <a id='n14377' href='#n14377'>14377</a> <a id='n14378' href='#n14378'>14378</a> <a id='n14379' href='#n14379'>14379</a> <a id='n14380' href='#n14380'>14380</a> <a id='n14381' href='#n14381'>14381</a> <a id='n14382' href='#n14382'>14382</a> <a id='n14383' href='#n14383'>14383</a> <a id='n14384' href='#n14384'>14384</a> <a id='n14385' href='#n14385'>14385</a> <a id='n14386' href='#n14386'>14386</a> <a id='n14387' href='#n14387'>14387</a> <a id='n14388' href='#n14388'>14388</a> <a id='n14389' href='#n14389'>14389</a> <a id='n14390' href='#n14390'>14390</a> <a id='n14391' href='#n14391'>14391</a> <a id='n14392' href='#n14392'>14392</a> <a id='n14393' href='#n14393'>14393</a> <a id='n14394' href='#n14394'>14394</a> <a id='n14395' href='#n14395'>14395</a> <a id='n14396' href='#n14396'>14396</a> <a id='n14397' href='#n14397'>14397</a> <a id='n14398' href='#n14398'>14398</a> <a id='n14399' href='#n14399'>14399</a> <a id='n14400' href='#n14400'>14400</a> <a id='n14401' href='#n14401'>14401</a> <a id='n14402' href='#n14402'>14402</a> <a id='n14403' href='#n14403'>14403</a> <a id='n14404' href='#n14404'>14404</a> <a id='n14405' href='#n14405'>14405</a> <a id='n14406' href='#n14406'>14406</a> <a id='n14407' href='#n14407'>14407</a> <a id='n14408' href='#n14408'>14408</a> <a id='n14409' href='#n14409'>14409</a> <a id='n14410' href='#n14410'>14410</a> <a id='n14411' href='#n14411'>14411</a> <a id='n14412' href='#n14412'>14412</a> <a id='n14413' href='#n14413'>14413</a> <a id='n14414' href='#n14414'>14414</a> <a id='n14415' href='#n14415'>14415</a> <a id='n14416' href='#n14416'>14416</a> <a id='n14417' href='#n14417'>14417</a> <a id='n14418' href='#n14418'>14418</a> <a id='n14419' href='#n14419'>14419</a> <a id='n14420' href='#n14420'>14420</a> <a id='n14421' href='#n14421'>14421</a> <a id='n14422' href='#n14422'>14422</a> <a id='n14423' href='#n14423'>14423</a> <a id='n14424' href='#n14424'>14424</a> <a id='n14425' href='#n14425'>14425</a> <a id='n14426' href='#n14426'>14426</a> <a id='n14427' href='#n14427'>14427</a> <a id='n14428' href='#n14428'>14428</a> <a id='n14429' href='#n14429'>14429</a> <a id='n14430' href='#n14430'>14430</a> <a id='n14431' href='#n14431'>14431</a> <a id='n14432' href='#n14432'>14432</a> <a id='n14433' href='#n14433'>14433</a> <a id='n14434' href='#n14434'>14434</a> <a id='n14435' href='#n14435'>14435</a> <a id='n14436' href='#n14436'>14436</a> <a id='n14437' href='#n14437'>14437</a> <a id='n14438' href='#n14438'>14438</a> <a id='n14439' href='#n14439'>14439</a> <a id='n14440' href='#n14440'>14440</a> <a id='n14441' href='#n14441'>14441</a> <a id='n14442' href='#n14442'>14442</a> <a id='n14443' href='#n14443'>14443</a> <a id='n14444' href='#n14444'>14444</a> <a id='n14445' href='#n14445'>14445</a> <a id='n14446' href='#n14446'>14446</a> <a id='n14447' href='#n14447'>14447</a> <a id='n14448' href='#n14448'>14448</a> <a id='n14449' href='#n14449'>14449</a> <a id='n14450' href='#n14450'>14450</a> <a id='n14451' href='#n14451'>14451</a> <a id='n14452' href='#n14452'>14452</a> <a id='n14453' href='#n14453'>14453</a> <a id='n14454' href='#n14454'>14454</a> <a id='n14455' href='#n14455'>14455</a> <a id='n14456' href='#n14456'>14456</a> <a id='n14457' href='#n14457'>14457</a> <a id='n14458' href='#n14458'>14458</a> <a id='n14459' href='#n14459'>14459</a> <a id='n14460' href='#n14460'>14460</a> <a id='n14461' href='#n14461'>14461</a> <a id='n14462' href='#n14462'>14462</a> <a id='n14463' href='#n14463'>14463</a> <a id='n14464' href='#n14464'>14464</a> <a id='n14465' href='#n14465'>14465</a> <a id='n14466' href='#n14466'>14466</a> <a id='n14467' href='#n14467'>14467</a> <a id='n14468' href='#n14468'>14468</a> <a id='n14469' href='#n14469'>14469</a> <a id='n14470' href='#n14470'>14470</a> <a id='n14471' href='#n14471'>14471</a> <a id='n14472' href='#n14472'>14472</a> <a id='n14473' href='#n14473'>14473</a> <a id='n14474' href='#n14474'>14474</a> <a id='n14475' href='#n14475'>14475</a> <a id='n14476' href='#n14476'>14476</a> <a id='n14477' href='#n14477'>14477</a> <a id='n14478' href='#n14478'>14478</a> <a id='n14479' href='#n14479'>14479</a> <a id='n14480' href='#n14480'>14480</a> <a id='n14481' href='#n14481'>14481</a> <a id='n14482' href='#n14482'>14482</a> <a id='n14483' href='#n14483'>14483</a> <a id='n14484' href='#n14484'>14484</a> <a id='n14485' href='#n14485'>14485</a> <a id='n14486' href='#n14486'>14486</a> <a id='n14487' href='#n14487'>14487</a> <a id='n14488' href='#n14488'>14488</a> <a id='n14489' href='#n14489'>14489</a> <a id='n14490' href='#n14490'>14490</a> <a id='n14491' href='#n14491'>14491</a> <a id='n14492' href='#n14492'>14492</a> <a id='n14493' href='#n14493'>14493</a> <a id='n14494' href='#n14494'>14494</a> <a id='n14495' href='#n14495'>14495</a> <a id='n14496' href='#n14496'>14496</a> <a id='n14497' href='#n14497'>14497</a> <a id='n14498' href='#n14498'>14498</a> <a id='n14499' href='#n14499'>14499</a> <a id='n14500' href='#n14500'>14500</a> <a id='n14501' href='#n14501'>14501</a> <a id='n14502' href='#n14502'>14502</a> <a id='n14503' href='#n14503'>14503</a> <a id='n14504' href='#n14504'>14504</a> <a id='n14505' href='#n14505'>14505</a> <a id='n14506' href='#n14506'>14506</a> <a id='n14507' href='#n14507'>14507</a> <a id='n14508' href='#n14508'>14508</a> <a id='n14509' href='#n14509'>14509</a> <a id='n14510' href='#n14510'>14510</a> <a id='n14511' href='#n14511'>14511</a> <a id='n14512' href='#n14512'>14512</a> <a id='n14513' href='#n14513'>14513</a> <a id='n14514' href='#n14514'>14514</a> <a id='n14515' href='#n14515'>14515</a> <a id='n14516' href='#n14516'>14516</a> <a id='n14517' href='#n14517'>14517</a> <a id='n14518' href='#n14518'>14518</a> <a id='n14519' href='#n14519'>14519</a> <a id='n14520' href='#n14520'>14520</a> <a id='n14521' href='#n14521'>14521</a> <a id='n14522' href='#n14522'>14522</a> <a id='n14523' href='#n14523'>14523</a> <a id='n14524' href='#n14524'>14524</a> <a id='n14525' href='#n14525'>14525</a> <a id='n14526' href='#n14526'>14526</a> <a id='n14527' href='#n14527'>14527</a> <a id='n14528' href='#n14528'>14528</a> <a id='n14529' href='#n14529'>14529</a> <a id='n14530' href='#n14530'>14530</a> <a id='n14531' href='#n14531'>14531</a> <a id='n14532' href='#n14532'>14532</a> <a id='n14533' href='#n14533'>14533</a> <a id='n14534' href='#n14534'>14534</a> <a id='n14535' href='#n14535'>14535</a> <a id='n14536' href='#n14536'>14536</a> <a id='n14537' href='#n14537'>14537</a> <a id='n14538' href='#n14538'>14538</a> <a id='n14539' href='#n14539'>14539</a> <a id='n14540' href='#n14540'>14540</a> <a id='n14541' href='#n14541'>14541</a> <a id='n14542' href='#n14542'>14542</a> <a id='n14543' href='#n14543'>14543</a> <a id='n14544' href='#n14544'>14544</a> <a id='n14545' href='#n14545'>14545</a> <a id='n14546' href='#n14546'>14546</a> <a id='n14547' href='#n14547'>14547</a> <a id='n14548' href='#n14548'>14548</a> <a id='n14549' href='#n14549'>14549</a> <a id='n14550' href='#n14550'>14550</a> <a id='n14551' href='#n14551'>14551</a> <a id='n14552' href='#n14552'>14552</a> <a id='n14553' href='#n14553'>14553</a> <a id='n14554' href='#n14554'>14554</a> <a id='n14555' href='#n14555'>14555</a> <a id='n14556' href='#n14556'>14556</a> <a id='n14557' href='#n14557'>14557</a> <a id='n14558' href='#n14558'>14558</a> <a id='n14559' href='#n14559'>14559</a> <a id='n14560' href='#n14560'>14560</a> <a id='n14561' href='#n14561'>14561</a> <a id='n14562' href='#n14562'>14562</a> <a id='n14563' href='#n14563'>14563</a> <a id='n14564' href='#n14564'>14564</a> <a id='n14565' href='#n14565'>14565</a> <a id='n14566' href='#n14566'>14566</a> <a id='n14567' href='#n14567'>14567</a> <a id='n14568' href='#n14568'>14568</a> <a id='n14569' href='#n14569'>14569</a> <a id='n14570' href='#n14570'>14570</a> <a id='n14571' href='#n14571'>14571</a> <a id='n14572' href='#n14572'>14572</a> <a id='n14573' href='#n14573'>14573</a> <a id='n14574' href='#n14574'>14574</a> <a id='n14575' href='#n14575'>14575</a> <a id='n14576' href='#n14576'>14576</a> <a id='n14577' href='#n14577'>14577</a> <a id='n14578' href='#n14578'>14578</a> <a id='n14579' href='#n14579'>14579</a> <a id='n14580' href='#n14580'>14580</a> <a id='n14581' href='#n14581'>14581</a> <a id='n14582' href='#n14582'>14582</a> <a id='n14583' href='#n14583'>14583</a> <a id='n14584' href='#n14584'>14584</a> <a id='n14585' href='#n14585'>14585</a> <a id='n14586' href='#n14586'>14586</a> <a id='n14587' href='#n14587'>14587</a> <a id='n14588' href='#n14588'>14588</a> <a id='n14589' href='#n14589'>14589</a> <a id='n14590' href='#n14590'>14590</a> <a id='n14591' href='#n14591'>14591</a> <a id='n14592' href='#n14592'>14592</a> <a id='n14593' href='#n14593'>14593</a> <a id='n14594' href='#n14594'>14594</a> <a id='n14595' href='#n14595'>14595</a> <a id='n14596' href='#n14596'>14596</a> <a id='n14597' href='#n14597'>14597</a> <a id='n14598' href='#n14598'>14598</a> <a id='n14599' href='#n14599'>14599</a> <a id='n14600' href='#n14600'>14600</a> <a id='n14601' href='#n14601'>14601</a> <a id='n14602' href='#n14602'>14602</a> <a id='n14603' href='#n14603'>14603</a> <a id='n14604' href='#n14604'>14604</a> <a id='n14605' href='#n14605'>14605</a> <a id='n14606' href='#n14606'>14606</a> <a id='n14607' href='#n14607'>14607</a> <a id='n14608' href='#n14608'>14608</a> <a id='n14609' href='#n14609'>14609</a> <a id='n14610' href='#n14610'>14610</a> <a id='n14611' href='#n14611'>14611</a> <a id='n14612' href='#n14612'>14612</a> <a id='n14613' href='#n14613'>14613</a> <a id='n14614' href='#n14614'>14614</a> <a id='n14615' href='#n14615'>14615</a> <a id='n14616' href='#n14616'>14616</a> <a id='n14617' href='#n14617'>14617</a> <a id='n14618' href='#n14618'>14618</a> <a id='n14619' href='#n14619'>14619</a> <a id='n14620' href='#n14620'>14620</a> <a id='n14621' href='#n14621'>14621</a> <a id='n14622' href='#n14622'>14622</a> <a id='n14623' href='#n14623'>14623</a> <a id='n14624' href='#n14624'>14624</a> <a id='n14625' href='#n14625'>14625</a> <a id='n14626' href='#n14626'>14626</a> <a id='n14627' href='#n14627'>14627</a> <a id='n14628' href='#n14628'>14628</a> <a id='n14629' href='#n14629'>14629</a> <a id='n14630' href='#n14630'>14630</a> <a id='n14631' href='#n14631'>14631</a> <a id='n14632' href='#n14632'>14632</a> <a id='n14633' href='#n14633'>14633</a> <a id='n14634' href='#n14634'>14634</a> <a id='n14635' href='#n14635'>14635</a> <a id='n14636' href='#n14636'>14636</a> <a id='n14637' href='#n14637'>14637</a> <a id='n14638' href='#n14638'>14638</a> <a id='n14639' href='#n14639'>14639</a> <a id='n14640' href='#n14640'>14640</a> <a id='n14641' href='#n14641'>14641</a> <a id='n14642' href='#n14642'>14642</a> <a id='n14643' href='#n14643'>14643</a> <a id='n14644' href='#n14644'>14644</a> <a id='n14645' href='#n14645'>14645</a> <a id='n14646' href='#n14646'>14646</a> <a id='n14647' href='#n14647'>14647</a> <a id='n14648' href='#n14648'>14648</a> <a id='n14649' href='#n14649'>14649</a> <a id='n14650' href='#n14650'>14650</a> <a id='n14651' href='#n14651'>14651</a> <a id='n14652' href='#n14652'>14652</a> <a id='n14653' href='#n14653'>14653</a> <a id='n14654' href='#n14654'>14654</a> <a id='n14655' href='#n14655'>14655</a> <a id='n14656' href='#n14656'>14656</a> <a id='n14657' href='#n14657'>14657</a> <a id='n14658' href='#n14658'>14658</a> <a id='n14659' href='#n14659'>14659</a> <a id='n14660' href='#n14660'>14660</a> <a id='n14661' href='#n14661'>14661</a> <a id='n14662' href='#n14662'>14662</a> <a id='n14663' href='#n14663'>14663</a> <a id='n14664' href='#n14664'>14664</a> <a id='n14665' href='#n14665'>14665</a> <a id='n14666' href='#n14666'>14666</a> <a id='n14667' href='#n14667'>14667</a> <a id='n14668' href='#n14668'>14668</a> <a id='n14669' href='#n14669'>14669</a> <a id='n14670' href='#n14670'>14670</a> <a id='n14671' href='#n14671'>14671</a> <a id='n14672' href='#n14672'>14672</a> <a id='n14673' href='#n14673'>14673</a> <a id='n14674' href='#n14674'>14674</a> <a id='n14675' href='#n14675'>14675</a> <a id='n14676' href='#n14676'>14676</a> <a id='n14677' href='#n14677'>14677</a> <a id='n14678' href='#n14678'>14678</a> <a id='n14679' href='#n14679'>14679</a> <a id='n14680' href='#n14680'>14680</a> <a id='n14681' href='#n14681'>14681</a> <a id='n14682' href='#n14682'>14682</a> <a id='n14683' href='#n14683'>14683</a> <a id='n14684' href='#n14684'>14684</a> <a id='n14685' href='#n14685'>14685</a> <a id='n14686' href='#n14686'>14686</a> <a id='n14687' href='#n14687'>14687</a> <a id='n14688' href='#n14688'>14688</a> <a id='n14689' href='#n14689'>14689</a> <a id='n14690' href='#n14690'>14690</a> <a id='n14691' href='#n14691'>14691</a> <a id='n14692' href='#n14692'>14692</a> <a id='n14693' href='#n14693'>14693</a> <a id='n14694' href='#n14694'>14694</a> <a id='n14695' href='#n14695'>14695</a> <a id='n14696' href='#n14696'>14696</a> <a id='n14697' href='#n14697'>14697</a> <a id='n14698' href='#n14698'>14698</a> <a id='n14699' href='#n14699'>14699</a> <a id='n14700' href='#n14700'>14700</a> <a id='n14701' href='#n14701'>14701</a> <a id='n14702' href='#n14702'>14702</a> <a id='n14703' href='#n14703'>14703</a> <a id='n14704' href='#n14704'>14704</a> <a id='n14705' href='#n14705'>14705</a> <a id='n14706' href='#n14706'>14706</a> <a id='n14707' href='#n14707'>14707</a> <a id='n14708' href='#n14708'>14708</a> <a id='n14709' href='#n14709'>14709</a> <a id='n14710' href='#n14710'>14710</a> <a id='n14711' href='#n14711'>14711</a> <a id='n14712' href='#n14712'>14712</a> <a id='n14713' href='#n14713'>14713</a> <a id='n14714' href='#n14714'>14714</a> <a id='n14715' href='#n14715'>14715</a> <a id='n14716' href='#n14716'>14716</a> <a id='n14717' href='#n14717'>14717</a> <a id='n14718' href='#n14718'>14718</a> <a id='n14719' href='#n14719'>14719</a> <a id='n14720' href='#n14720'>14720</a> <a id='n14721' href='#n14721'>14721</a> <a id='n14722' href='#n14722'>14722</a> <a id='n14723' href='#n14723'>14723</a> <a id='n14724' href='#n14724'>14724</a> <a id='n14725' href='#n14725'>14725</a> <a id='n14726' href='#n14726'>14726</a> <a id='n14727' href='#n14727'>14727</a> <a id='n14728' href='#n14728'>14728</a> <a id='n14729' href='#n14729'>14729</a> <a id='n14730' href='#n14730'>14730</a> <a id='n14731' href='#n14731'>14731</a> <a id='n14732' href='#n14732'>14732</a> <a id='n14733' href='#n14733'>14733</a> <a id='n14734' href='#n14734'>14734</a> <a id='n14735' href='#n14735'>14735</a> <a id='n14736' href='#n14736'>14736</a> <a id='n14737' href='#n14737'>14737</a> <a id='n14738' href='#n14738'>14738</a> <a id='n14739' href='#n14739'>14739</a> <a id='n14740' href='#n14740'>14740</a> <a id='n14741' href='#n14741'>14741</a> <a id='n14742' href='#n14742'>14742</a> <a id='n14743' href='#n14743'>14743</a> <a id='n14744' href='#n14744'>14744</a> <a id='n14745' href='#n14745'>14745</a> <a id='n14746' href='#n14746'>14746</a> <a id='n14747' href='#n14747'>14747</a> <a id='n14748' href='#n14748'>14748</a> <a id='n14749' href='#n14749'>14749</a> <a id='n14750' href='#n14750'>14750</a> <a id='n14751' href='#n14751'>14751</a> <a id='n14752' href='#n14752'>14752</a> <a id='n14753' href='#n14753'>14753</a> <a id='n14754' href='#n14754'>14754</a> <a id='n14755' href='#n14755'>14755</a> <a id='n14756' href='#n14756'>14756</a> <a id='n14757' href='#n14757'>14757</a> <a id='n14758' href='#n14758'>14758</a> <a id='n14759' href='#n14759'>14759</a> <a id='n14760' href='#n14760'>14760</a> <a id='n14761' href='#n14761'>14761</a> <a id='n14762' href='#n14762'>14762</a> <a id='n14763' href='#n14763'>14763</a> <a id='n14764' href='#n14764'>14764</a> <a id='n14765' href='#n14765'>14765</a> <a id='n14766' href='#n14766'>14766</a> <a id='n14767' href='#n14767'>14767</a> <a id='n14768' href='#n14768'>14768</a> <a id='n14769' href='#n14769'>14769</a> <a id='n14770' href='#n14770'>14770</a> <a id='n14771' href='#n14771'>14771</a> <a id='n14772' href='#n14772'>14772</a> <a id='n14773' href='#n14773'>14773</a> <a id='n14774' href='#n14774'>14774</a> <a id='n14775' href='#n14775'>14775</a> <a id='n14776' href='#n14776'>14776</a> <a id='n14777' href='#n14777'>14777</a> <a id='n14778' href='#n14778'>14778</a> <a id='n14779' href='#n14779'>14779</a> <a id='n14780' href='#n14780'>14780</a> <a id='n14781' href='#n14781'>14781</a> <a id='n14782' href='#n14782'>14782</a> <a id='n14783' href='#n14783'>14783</a> <a id='n14784' href='#n14784'>14784</a> <a id='n14785' href='#n14785'>14785</a> <a id='n14786' href='#n14786'>14786</a> <a id='n14787' href='#n14787'>14787</a> <a id='n14788' href='#n14788'>14788</a> <a id='n14789' href='#n14789'>14789</a> <a id='n14790' href='#n14790'>14790</a> <a id='n14791' href='#n14791'>14791</a> <a id='n14792' href='#n14792'>14792</a> <a id='n14793' href='#n14793'>14793</a> <a id='n14794' href='#n14794'>14794</a> <a id='n14795' href='#n14795'>14795</a> <a id='n14796' href='#n14796'>14796</a> <a id='n14797' href='#n14797'>14797</a> <a id='n14798' href='#n14798'>14798</a> <a id='n14799' href='#n14799'>14799</a> <a id='n14800' href='#n14800'>14800</a> <a id='n14801' href='#n14801'>14801</a> <a id='n14802' href='#n14802'>14802</a> <a id='n14803' href='#n14803'>14803</a> <a id='n14804' href='#n14804'>14804</a> <a id='n14805' href='#n14805'>14805</a> <a id='n14806' href='#n14806'>14806</a> <a id='n14807' href='#n14807'>14807</a> <a id='n14808' href='#n14808'>14808</a> <a id='n14809' href='#n14809'>14809</a> <a id='n14810' href='#n14810'>14810</a> <a id='n14811' href='#n14811'>14811</a> <a id='n14812' href='#n14812'>14812</a> <a id='n14813' href='#n14813'>14813</a> <a id='n14814' href='#n14814'>14814</a> <a id='n14815' href='#n14815'>14815</a> <a id='n14816' href='#n14816'>14816</a> <a id='n14817' href='#n14817'>14817</a> <a id='n14818' href='#n14818'>14818</a> <a id='n14819' href='#n14819'>14819</a> <a id='n14820' href='#n14820'>14820</a> <a id='n14821' href='#n14821'>14821</a> <a id='n14822' href='#n14822'>14822</a> <a id='n14823' href='#n14823'>14823</a> <a id='n14824' href='#n14824'>14824</a> <a id='n14825' href='#n14825'>14825</a> <a id='n14826' href='#n14826'>14826</a> <a id='n14827' href='#n14827'>14827</a> <a id='n14828' href='#n14828'>14828</a> <a id='n14829' href='#n14829'>14829</a> <a id='n14830' href='#n14830'>14830</a> <a id='n14831' href='#n14831'>14831</a> <a id='n14832' href='#n14832'>14832</a> <a id='n14833' href='#n14833'>14833</a> <a id='n14834' href='#n14834'>14834</a> <a id='n14835' href='#n14835'>14835</a> <a id='n14836' href='#n14836'>14836</a> <a id='n14837' href='#n14837'>14837</a> <a id='n14838' href='#n14838'>14838</a> <a id='n14839' href='#n14839'>14839</a> <a id='n14840' href='#n14840'>14840</a> <a id='n14841' href='#n14841'>14841</a> <a id='n14842' href='#n14842'>14842</a> <a id='n14843' href='#n14843'>14843</a> <a id='n14844' href='#n14844'>14844</a> <a id='n14845' href='#n14845'>14845</a> <a id='n14846' href='#n14846'>14846</a> <a id='n14847' href='#n14847'>14847</a> <a id='n14848' href='#n14848'>14848</a> <a id='n14849' href='#n14849'>14849</a> <a id='n14850' href='#n14850'>14850</a> <a id='n14851' href='#n14851'>14851</a> <a id='n14852' href='#n14852'>14852</a> <a id='n14853' href='#n14853'>14853</a> <a id='n14854' href='#n14854'>14854</a> <a id='n14855' href='#n14855'>14855</a> <a id='n14856' href='#n14856'>14856</a> <a id='n14857' href='#n14857'>14857</a> <a id='n14858' href='#n14858'>14858</a> <a id='n14859' href='#n14859'>14859</a> <a id='n14860' href='#n14860'>14860</a> <a id='n14861' href='#n14861'>14861</a> <a id='n14862' href='#n14862'>14862</a> <a id='n14863' href='#n14863'>14863</a> <a id='n14864' href='#n14864'>14864</a> <a id='n14865' href='#n14865'>14865</a> <a id='n14866' href='#n14866'>14866</a> <a id='n14867' href='#n14867'>14867</a> <a id='n14868' href='#n14868'>14868</a> <a id='n14869' href='#n14869'>14869</a> <a id='n14870' href='#n14870'>14870</a> <a id='n14871' href='#n14871'>14871</a> <a id='n14872' href='#n14872'>14872</a> <a id='n14873' href='#n14873'>14873</a> <a id='n14874' href='#n14874'>14874</a> <a id='n14875' href='#n14875'>14875</a> <a id='n14876' href='#n14876'>14876</a> <a id='n14877' href='#n14877'>14877</a> <a id='n14878' href='#n14878'>14878</a> <a id='n14879' href='#n14879'>14879</a> <a id='n14880' href='#n14880'>14880</a> <a id='n14881' href='#n14881'>14881</a> <a id='n14882' href='#n14882'>14882</a> <a id='n14883' href='#n14883'>14883</a> <a id='n14884' href='#n14884'>14884</a> <a id='n14885' href='#n14885'>14885</a> <a id='n14886' href='#n14886'>14886</a> <a id='n14887' href='#n14887'>14887</a> <a id='n14888' href='#n14888'>14888</a> <a id='n14889' href='#n14889'>14889</a> <a id='n14890' href='#n14890'>14890</a> <a id='n14891' href='#n14891'>14891</a> <a id='n14892' href='#n14892'>14892</a> <a id='n14893' href='#n14893'>14893</a> <a id='n14894' href='#n14894'>14894</a> <a id='n14895' href='#n14895'>14895</a> <a id='n14896' href='#n14896'>14896</a> <a id='n14897' href='#n14897'>14897</a> <a id='n14898' href='#n14898'>14898</a> <a id='n14899' href='#n14899'>14899</a> <a id='n14900' href='#n14900'>14900</a> <a id='n14901' href='#n14901'>14901</a> <a id='n14902' href='#n14902'>14902</a> <a id='n14903' href='#n14903'>14903</a> <a id='n14904' href='#n14904'>14904</a> <a id='n14905' href='#n14905'>14905</a> <a id='n14906' href='#n14906'>14906</a> <a id='n14907' href='#n14907'>14907</a> <a id='n14908' href='#n14908'>14908</a> <a id='n14909' href='#n14909'>14909</a> <a id='n14910' href='#n14910'>14910</a> <a id='n14911' href='#n14911'>14911</a> <a id='n14912' href='#n14912'>14912</a> <a id='n14913' href='#n14913'>14913</a> <a id='n14914' href='#n14914'>14914</a> <a id='n14915' href='#n14915'>14915</a> <a id='n14916' href='#n14916'>14916</a> <a id='n14917' href='#n14917'>14917</a> <a id='n14918' href='#n14918'>14918</a> <a id='n14919' href='#n14919'>14919</a> <a id='n14920' href='#n14920'>14920</a> <a id='n14921' href='#n14921'>14921</a> <a id='n14922' href='#n14922'>14922</a> <a id='n14923' href='#n14923'>14923</a> <a id='n14924' href='#n14924'>14924</a> <a id='n14925' href='#n14925'>14925</a> <a id='n14926' href='#n14926'>14926</a> <a id='n14927' href='#n14927'>14927</a> <a id='n14928' href='#n14928'>14928</a> <a id='n14929' href='#n14929'>14929</a> <a id='n14930' href='#n14930'>14930</a> <a id='n14931' href='#n14931'>14931</a> <a id='n14932' href='#n14932'>14932</a> <a id='n14933' href='#n14933'>14933</a> <a id='n14934' href='#n14934'>14934</a> <a id='n14935' href='#n14935'>14935</a> <a id='n14936' href='#n14936'>14936</a> <a id='n14937' href='#n14937'>14937</a> <a id='n14938' href='#n14938'>14938</a> <a id='n14939' href='#n14939'>14939</a> <a id='n14940' href='#n14940'>14940</a> <a id='n14941' href='#n14941'>14941</a> <a id='n14942' href='#n14942'>14942</a> <a id='n14943' href='#n14943'>14943</a> <a id='n14944' href='#n14944'>14944</a> <a id='n14945' href='#n14945'>14945</a> <a id='n14946' href='#n14946'>14946</a> <a id='n14947' href='#n14947'>14947</a> <a id='n14948' href='#n14948'>14948</a> <a id='n14949' href='#n14949'>14949</a> <a id='n14950' href='#n14950'>14950</a> <a id='n14951' href='#n14951'>14951</a> <a id='n14952' href='#n14952'>14952</a> <a id='n14953' href='#n14953'>14953</a> <a id='n14954' href='#n14954'>14954</a> <a id='n14955' href='#n14955'>14955</a> <a id='n14956' href='#n14956'>14956</a> <a id='n14957' href='#n14957'>14957</a> <a id='n14958' href='#n14958'>14958</a> <a id='n14959' href='#n14959'>14959</a> <a id='n14960' href='#n14960'>14960</a> <a id='n14961' href='#n14961'>14961</a> <a id='n14962' href='#n14962'>14962</a> <a id='n14963' href='#n14963'>14963</a> <a id='n14964' href='#n14964'>14964</a> <a id='n14965' href='#n14965'>14965</a> <a id='n14966' href='#n14966'>14966</a> <a id='n14967' href='#n14967'>14967</a> <a id='n14968' href='#n14968'>14968</a> <a id='n14969' href='#n14969'>14969</a> <a id='n14970' href='#n14970'>14970</a> <a id='n14971' href='#n14971'>14971</a> <a id='n14972' href='#n14972'>14972</a> <a id='n14973' href='#n14973'>14973</a> <a id='n14974' href='#n14974'>14974</a> <a id='n14975' href='#n14975'>14975</a> <a id='n14976' href='#n14976'>14976</a> <a id='n14977' href='#n14977'>14977</a> <a id='n14978' href='#n14978'>14978</a> <a id='n14979' href='#n14979'>14979</a> <a id='n14980' href='#n14980'>14980</a> <a id='n14981' href='#n14981'>14981</a> <a id='n14982' href='#n14982'>14982</a> <a id='n14983' href='#n14983'>14983</a> <a id='n14984' href='#n14984'>14984</a> <a id='n14985' href='#n14985'>14985</a> <a id='n14986' href='#n14986'>14986</a> <a id='n14987' href='#n14987'>14987</a> <a id='n14988' href='#n14988'>14988</a> <a id='n14989' href='#n14989'>14989</a> <a id='n14990' href='#n14990'>14990</a> <a id='n14991' href='#n14991'>14991</a> <a id='n14992' href='#n14992'>14992</a> <a id='n14993' href='#n14993'>14993</a> <a id='n14994' href='#n14994'>14994</a> <a id='n14995' href='#n14995'>14995</a> <a id='n14996' href='#n14996'>14996</a> <a id='n14997' href='#n14997'>14997</a> <a id='n14998' href='#n14998'>14998</a> <a id='n14999' href='#n14999'>14999</a> <a id='n15000' href='#n15000'>15000</a> <a id='n15001' href='#n15001'>15001</a> <a id='n15002' href='#n15002'>15002</a> <a id='n15003' href='#n15003'>15003</a> <a id='n15004' href='#n15004'>15004</a> <a id='n15005' href='#n15005'>15005</a> <a id='n15006' href='#n15006'>15006</a> <a id='n15007' href='#n15007'>15007</a> <a id='n15008' href='#n15008'>15008</a> <a id='n15009' href='#n15009'>15009</a> <a id='n15010' href='#n15010'>15010</a> <a id='n15011' href='#n15011'>15011</a> <a id='n15012' href='#n15012'>15012</a> <a id='n15013' href='#n15013'>15013</a> <a id='n15014' href='#n15014'>15014</a> <a id='n15015' href='#n15015'>15015</a> <a id='n15016' href='#n15016'>15016</a> <a id='n15017' href='#n15017'>15017</a> <a id='n15018' href='#n15018'>15018</a> <a id='n15019' href='#n15019'>15019</a> <a id='n15020' href='#n15020'>15020</a> <a id='n15021' href='#n15021'>15021</a> <a id='n15022' href='#n15022'>15022</a> <a id='n15023' href='#n15023'>15023</a> <a id='n15024' href='#n15024'>15024</a> <a id='n15025' href='#n15025'>15025</a> <a id='n15026' href='#n15026'>15026</a> <a id='n15027' href='#n15027'>15027</a> <a id='n15028' href='#n15028'>15028</a> <a id='n15029' href='#n15029'>15029</a> <a id='n15030' href='#n15030'>15030</a> <a id='n15031' href='#n15031'>15031</a> <a id='n15032' href='#n15032'>15032</a> <a id='n15033' href='#n15033'>15033</a> <a id='n15034' href='#n15034'>15034</a> <a id='n15035' href='#n15035'>15035</a> <a id='n15036' href='#n15036'>15036</a> <a id='n15037' href='#n15037'>15037</a> <a id='n15038' href='#n15038'>15038</a> <a id='n15039' href='#n15039'>15039</a> <a id='n15040' href='#n15040'>15040</a> <a id='n15041' href='#n15041'>15041</a> <a id='n15042' href='#n15042'>15042</a> <a id='n15043' href='#n15043'>15043</a> <a id='n15044' href='#n15044'>15044</a> <a id='n15045' href='#n15045'>15045</a> <a id='n15046' href='#n15046'>15046</a> <a id='n15047' href='#n15047'>15047</a> <a id='n15048' href='#n15048'>15048</a> <a id='n15049' href='#n15049'>15049</a> <a id='n15050' href='#n15050'>15050</a> <a id='n15051' href='#n15051'>15051</a> <a id='n15052' href='#n15052'>15052</a> <a id='n15053' href='#n15053'>15053</a> <a id='n15054' href='#n15054'>15054</a> <a id='n15055' href='#n15055'>15055</a> <a id='n15056' href='#n15056'>15056</a> <a id='n15057' href='#n15057'>15057</a> <a id='n15058' href='#n15058'>15058</a> <a id='n15059' href='#n15059'>15059</a> <a id='n15060' href='#n15060'>15060</a> <a id='n15061' href='#n15061'>15061</a> <a id='n15062' href='#n15062'>15062</a> <a id='n15063' href='#n15063'>15063</a> <a id='n15064' href='#n15064'>15064</a> <a id='n15065' href='#n15065'>15065</a> <a id='n15066' href='#n15066'>15066</a> <a id='n15067' href='#n15067'>15067</a> <a id='n15068' href='#n15068'>15068</a> <a id='n15069' href='#n15069'>15069</a> <a id='n15070' href='#n15070'>15070</a> <a id='n15071' href='#n15071'>15071</a> <a id='n15072' href='#n15072'>15072</a> <a id='n15073' href='#n15073'>15073</a> <a id='n15074' href='#n15074'>15074</a> <a id='n15075' href='#n15075'>15075</a> <a id='n15076' href='#n15076'>15076</a> <a id='n15077' href='#n15077'>15077</a> <a id='n15078' href='#n15078'>15078</a> <a id='n15079' href='#n15079'>15079</a> <a id='n15080' href='#n15080'>15080</a> <a id='n15081' href='#n15081'>15081</a> <a id='n15082' href='#n15082'>15082</a> <a id='n15083' href='#n15083'>15083</a> <a id='n15084' href='#n15084'>15084</a> <a id='n15085' href='#n15085'>15085</a> <a id='n15086' href='#n15086'>15086</a> <a id='n15087' href='#n15087'>15087</a> <a id='n15088' href='#n15088'>15088</a> <a id='n15089' href='#n15089'>15089</a> <a id='n15090' href='#n15090'>15090</a> <a id='n15091' href='#n15091'>15091</a> <a id='n15092' href='#n15092'>15092</a> <a id='n15093' href='#n15093'>15093</a> <a id='n15094' href='#n15094'>15094</a> <a id='n15095' href='#n15095'>15095</a> <a id='n15096' href='#n15096'>15096</a> <a id='n15097' href='#n15097'>15097</a> <a id='n15098' href='#n15098'>15098</a> <a id='n15099' href='#n15099'>15099</a> <a id='n15100' href='#n15100'>15100</a> <a id='n15101' href='#n15101'>15101</a> <a id='n15102' href='#n15102'>15102</a> <a id='n15103' href='#n15103'>15103</a> <a id='n15104' href='#n15104'>15104</a> <a id='n15105' href='#n15105'>15105</a> <a id='n15106' href='#n15106'>15106</a> <a id='n15107' href='#n15107'>15107</a> <a id='n15108' href='#n15108'>15108</a> <a id='n15109' href='#n15109'>15109</a> <a id='n15110' href='#n15110'>15110</a> <a id='n15111' href='#n15111'>15111</a> <a id='n15112' href='#n15112'>15112</a> <a id='n15113' href='#n15113'>15113</a> <a id='n15114' href='#n15114'>15114</a> <a id='n15115' href='#n15115'>15115</a> <a id='n15116' href='#n15116'>15116</a> <a id='n15117' href='#n15117'>15117</a> <a id='n15118' href='#n15118'>15118</a> <a id='n15119' href='#n15119'>15119</a> <a id='n15120' href='#n15120'>15120</a> <a id='n15121' href='#n15121'>15121</a> <a id='n15122' href='#n15122'>15122</a> <a id='n15123' href='#n15123'>15123</a> <a id='n15124' href='#n15124'>15124</a> <a id='n15125' href='#n15125'>15125</a> <a id='n15126' href='#n15126'>15126</a> <a id='n15127' href='#n15127'>15127</a> <a id='n15128' href='#n15128'>15128</a> <a id='n15129' href='#n15129'>15129</a> <a id='n15130' href='#n15130'>15130</a> <a id='n15131' href='#n15131'>15131</a> <a id='n15132' href='#n15132'>15132</a> <a id='n15133' href='#n15133'>15133</a> <a id='n15134' href='#n15134'>15134</a> <a id='n15135' href='#n15135'>15135</a> <a id='n15136' href='#n15136'>15136</a> <a id='n15137' href='#n15137'>15137</a> <a id='n15138' href='#n15138'>15138</a> <a id='n15139' href='#n15139'>15139</a> <a id='n15140' href='#n15140'>15140</a> <a id='n15141' href='#n15141'>15141</a> <a id='n15142' href='#n15142'>15142</a> <a id='n15143' href='#n15143'>15143</a> <a id='n15144' href='#n15144'>15144</a> <a id='n15145' href='#n15145'>15145</a> <a id='n15146' href='#n15146'>15146</a> <a id='n15147' href='#n15147'>15147</a> <a id='n15148' href='#n15148'>15148</a> <a id='n15149' href='#n15149'>15149</a> <a id='n15150' href='#n15150'>15150</a> <a id='n15151' href='#n15151'>15151</a> <a id='n15152' href='#n15152'>15152</a> <a id='n15153' href='#n15153'>15153</a> <a id='n15154' href='#n15154'>15154</a> <a id='n15155' href='#n15155'>15155</a> <a id='n15156' href='#n15156'>15156</a> <a id='n15157' href='#n15157'>15157</a> <a id='n15158' href='#n15158'>15158</a> <a id='n15159' href='#n15159'>15159</a> <a id='n15160' href='#n15160'>15160</a> <a id='n15161' href='#n15161'>15161</a> <a id='n15162' href='#n15162'>15162</a> <a id='n15163' href='#n15163'>15163</a> <a id='n15164' href='#n15164'>15164</a> <a id='n15165' href='#n15165'>15165</a> <a id='n15166' href='#n15166'>15166</a> <a id='n15167' href='#n15167'>15167</a> <a id='n15168' href='#n15168'>15168</a> <a id='n15169' href='#n15169'>15169</a> <a id='n15170' href='#n15170'>15170</a> <a id='n15171' href='#n15171'>15171</a> <a id='n15172' href='#n15172'>15172</a> <a id='n15173' href='#n15173'>15173</a> <a id='n15174' href='#n15174'>15174</a> <a id='n15175' href='#n15175'>15175</a> <a id='n15176' href='#n15176'>15176</a> <a id='n15177' href='#n15177'>15177</a> <a id='n15178' href='#n15178'>15178</a> <a id='n15179' href='#n15179'>15179</a> <a id='n15180' href='#n15180'>15180</a> <a id='n15181' href='#n15181'>15181</a> <a id='n15182' href='#n15182'>15182</a> <a id='n15183' href='#n15183'>15183</a> <a id='n15184' href='#n15184'>15184</a> <a id='n15185' href='#n15185'>15185</a> <a id='n15186' href='#n15186'>15186</a> <a id='n15187' href='#n15187'>15187</a> <a id='n15188' href='#n15188'>15188</a> <a id='n15189' href='#n15189'>15189</a> <a id='n15190' href='#n15190'>15190</a> <a id='n15191' href='#n15191'>15191</a> <a id='n15192' href='#n15192'>15192</a> <a id='n15193' href='#n15193'>15193</a> <a id='n15194' href='#n15194'>15194</a> <a id='n15195' href='#n15195'>15195</a> <a id='n15196' href='#n15196'>15196</a> <a id='n15197' href='#n15197'>15197</a> <a id='n15198' href='#n15198'>15198</a> <a id='n15199' href='#n15199'>15199</a> <a id='n15200' href='#n15200'>15200</a> <a id='n15201' href='#n15201'>15201</a> <a id='n15202' href='#n15202'>15202</a> <a id='n15203' href='#n15203'>15203</a> <a id='n15204' href='#n15204'>15204</a> <a id='n15205' href='#n15205'>15205</a> <a id='n15206' href='#n15206'>15206</a> <a id='n15207' href='#n15207'>15207</a> <a id='n15208' href='#n15208'>15208</a> <a id='n15209' href='#n15209'>15209</a> <a id='n15210' href='#n15210'>15210</a> <a id='n15211' href='#n15211'>15211</a> <a id='n15212' href='#n15212'>15212</a> <a id='n15213' href='#n15213'>15213</a> <a id='n15214' href='#n15214'>15214</a> <a id='n15215' href='#n15215'>15215</a> <a id='n15216' href='#n15216'>15216</a> <a id='n15217' href='#n15217'>15217</a> <a id='n15218' href='#n15218'>15218</a> <a id='n15219' href='#n15219'>15219</a> <a id='n15220' href='#n15220'>15220</a> <a id='n15221' href='#n15221'>15221</a> <a id='n15222' href='#n15222'>15222</a> <a id='n15223' href='#n15223'>15223</a> <a id='n15224' href='#n15224'>15224</a> <a id='n15225' href='#n15225'>15225</a> <a id='n15226' href='#n15226'>15226</a> <a id='n15227' href='#n15227'>15227</a> <a id='n15228' href='#n15228'>15228</a> <a id='n15229' href='#n15229'>15229</a> <a id='n15230' href='#n15230'>15230</a> <a id='n15231' href='#n15231'>15231</a> <a id='n15232' href='#n15232'>15232</a> <a id='n15233' href='#n15233'>15233</a> <a id='n15234' href='#n15234'>15234</a> <a id='n15235' href='#n15235'>15235</a> <a id='n15236' href='#n15236'>15236</a> <a id='n15237' href='#n15237'>15237</a> <a id='n15238' href='#n15238'>15238</a> <a id='n15239' href='#n15239'>15239</a> <a id='n15240' href='#n15240'>15240</a> <a id='n15241' href='#n15241'>15241</a> <a id='n15242' href='#n15242'>15242</a> <a id='n15243' href='#n15243'>15243</a> <a id='n15244' href='#n15244'>15244</a> <a id='n15245' href='#n15245'>15245</a> <a id='n15246' href='#n15246'>15246</a> <a id='n15247' href='#n15247'>15247</a> <a id='n15248' href='#n15248'>15248</a> <a id='n15249' href='#n15249'>15249</a> <a id='n15250' href='#n15250'>15250</a> <a id='n15251' href='#n15251'>15251</a> <a id='n15252' href='#n15252'>15252</a> <a id='n15253' href='#n15253'>15253</a> <a id='n15254' href='#n15254'>15254</a> <a id='n15255' href='#n15255'>15255</a> <a id='n15256' href='#n15256'>15256</a> <a id='n15257' href='#n15257'>15257</a> <a id='n15258' href='#n15258'>15258</a> <a id='n15259' href='#n15259'>15259</a> <a id='n15260' href='#n15260'>15260</a> <a id='n15261' href='#n15261'>15261</a> <a id='n15262' href='#n15262'>15262</a> <a id='n15263' href='#n15263'>15263</a> <a id='n15264' href='#n15264'>15264</a> <a id='n15265' href='#n15265'>15265</a> <a id='n15266' href='#n15266'>15266</a> <a id='n15267' href='#n15267'>15267</a> <a id='n15268' href='#n15268'>15268</a> <a id='n15269' href='#n15269'>15269</a> <a id='n15270' href='#n15270'>15270</a> <a id='n15271' href='#n15271'>15271</a> <a id='n15272' href='#n15272'>15272</a> <a id='n15273' href='#n15273'>15273</a> <a id='n15274' href='#n15274'>15274</a> <a id='n15275' href='#n15275'>15275</a> <a id='n15276' href='#n15276'>15276</a> <a id='n15277' href='#n15277'>15277</a> <a id='n15278' href='#n15278'>15278</a> <a id='n15279' href='#n15279'>15279</a> <a id='n15280' href='#n15280'>15280</a> <a id='n15281' href='#n15281'>15281</a> <a id='n15282' href='#n15282'>15282</a> <a id='n15283' href='#n15283'>15283</a> <a id='n15284' href='#n15284'>15284</a> <a id='n15285' href='#n15285'>15285</a> <a id='n15286' href='#n15286'>15286</a> <a id='n15287' href='#n15287'>15287</a> <a id='n15288' href='#n15288'>15288</a> <a id='n15289' href='#n15289'>15289</a> <a id='n15290' href='#n15290'>15290</a> <a id='n15291' href='#n15291'>15291</a> <a id='n15292' href='#n15292'>15292</a> <a id='n15293' href='#n15293'>15293</a> <a id='n15294' href='#n15294'>15294</a> <a id='n15295' href='#n15295'>15295</a> <a id='n15296' href='#n15296'>15296</a> <a id='n15297' href='#n15297'>15297</a> <a id='n15298' href='#n15298'>15298</a> <a id='n15299' href='#n15299'>15299</a> <a id='n15300' href='#n15300'>15300</a> <a id='n15301' href='#n15301'>15301</a> <a id='n15302' href='#n15302'>15302</a> <a id='n15303' href='#n15303'>15303</a> <a id='n15304' href='#n15304'>15304</a> <a id='n15305' href='#n15305'>15305</a> <a id='n15306' href='#n15306'>15306</a> <a id='n15307' href='#n15307'>15307</a> <a id='n15308' href='#n15308'>15308</a> <a id='n15309' href='#n15309'>15309</a> <a id='n15310' href='#n15310'>15310</a> <a id='n15311' href='#n15311'>15311</a> <a id='n15312' href='#n15312'>15312</a> <a id='n15313' href='#n15313'>15313</a> <a id='n15314' href='#n15314'>15314</a> <a id='n15315' href='#n15315'>15315</a> <a id='n15316' href='#n15316'>15316</a> <a id='n15317' href='#n15317'>15317</a> <a id='n15318' href='#n15318'>15318</a> <a id='n15319' href='#n15319'>15319</a> <a id='n15320' href='#n15320'>15320</a> <a id='n15321' href='#n15321'>15321</a> <a id='n15322' href='#n15322'>15322</a> <a id='n15323' href='#n15323'>15323</a> <a id='n15324' href='#n15324'>15324</a> <a id='n15325' href='#n15325'>15325</a> <a id='n15326' href='#n15326'>15326</a> <a id='n15327' href='#n15327'>15327</a> <a id='n15328' href='#n15328'>15328</a> <a id='n15329' href='#n15329'>15329</a> <a id='n15330' href='#n15330'>15330</a> <a id='n15331' href='#n15331'>15331</a> <a id='n15332' href='#n15332'>15332</a> <a id='n15333' href='#n15333'>15333</a> <a id='n15334' href='#n15334'>15334</a> <a id='n15335' href='#n15335'>15335</a> <a id='n15336' href='#n15336'>15336</a> <a id='n15337' href='#n15337'>15337</a> <a id='n15338' href='#n15338'>15338</a> <a id='n15339' href='#n15339'>15339</a> <a id='n15340' href='#n15340'>15340</a> <a id='n15341' href='#n15341'>15341</a> <a id='n15342' href='#n15342'>15342</a> <a id='n15343' href='#n15343'>15343</a> <a id='n15344' href='#n15344'>15344</a> <a id='n15345' href='#n15345'>15345</a> <a id='n15346' href='#n15346'>15346</a> <a id='n15347' href='#n15347'>15347</a> <a id='n15348' href='#n15348'>15348</a> <a id='n15349' href='#n15349'>15349</a> <a id='n15350' href='#n15350'>15350</a> <a id='n15351' href='#n15351'>15351</a> <a id='n15352' href='#n15352'>15352</a> <a id='n15353' href='#n15353'>15353</a> <a id='n15354' href='#n15354'>15354</a> <a id='n15355' href='#n15355'>15355</a> <a id='n15356' href='#n15356'>15356</a> <a id='n15357' href='#n15357'>15357</a> <a id='n15358' href='#n15358'>15358</a> <a id='n15359' href='#n15359'>15359</a> <a id='n15360' href='#n15360'>15360</a> <a id='n15361' href='#n15361'>15361</a> <a id='n15362' href='#n15362'>15362</a> <a id='n15363' href='#n15363'>15363</a> <a id='n15364' href='#n15364'>15364</a> <a id='n15365' href='#n15365'>15365</a> <a id='n15366' href='#n15366'>15366</a> <a id='n15367' href='#n15367'>15367</a> <a id='n15368' href='#n15368'>15368</a> <a id='n15369' href='#n15369'>15369</a> <a id='n15370' href='#n15370'>15370</a> <a id='n15371' href='#n15371'>15371</a> <a id='n15372' href='#n15372'>15372</a> <a id='n15373' href='#n15373'>15373</a> <a id='n15374' href='#n15374'>15374</a> <a id='n15375' href='#n15375'>15375</a> <a id='n15376' href='#n15376'>15376</a> <a id='n15377' href='#n15377'>15377</a> <a id='n15378' href='#n15378'>15378</a> <a id='n15379' href='#n15379'>15379</a> <a id='n15380' href='#n15380'>15380</a> <a id='n15381' href='#n15381'>15381</a> <a id='n15382' href='#n15382'>15382</a> <a id='n15383' href='#n15383'>15383</a> <a id='n15384' href='#n15384'>15384</a> <a id='n15385' href='#n15385'>15385</a> <a id='n15386' href='#n15386'>15386</a> <a id='n15387' href='#n15387'>15387</a> <a id='n15388' href='#n15388'>15388</a> <a id='n15389' href='#n15389'>15389</a> <a id='n15390' href='#n15390'>15390</a> <a id='n15391' href='#n15391'>15391</a> <a id='n15392' href='#n15392'>15392</a> <a id='n15393' href='#n15393'>15393</a> <a id='n15394' href='#n15394'>15394</a> <a id='n15395' href='#n15395'>15395</a> <a id='n15396' href='#n15396'>15396</a> <a id='n15397' href='#n15397'>15397</a> <a id='n15398' href='#n15398'>15398</a> <a id='n15399' href='#n15399'>15399</a> <a id='n15400' href='#n15400'>15400</a> <a id='n15401' href='#n15401'>15401</a> <a id='n15402' href='#n15402'>15402</a> <a id='n15403' href='#n15403'>15403</a> <a id='n15404' href='#n15404'>15404</a> <a id='n15405' href='#n15405'>15405</a> <a id='n15406' href='#n15406'>15406</a> <a id='n15407' href='#n15407'>15407</a> <a id='n15408' href='#n15408'>15408</a> <a id='n15409' href='#n15409'>15409</a> <a id='n15410' href='#n15410'>15410</a> <a id='n15411' href='#n15411'>15411</a> <a id='n15412' href='#n15412'>15412</a> <a id='n15413' href='#n15413'>15413</a> <a id='n15414' href='#n15414'>15414</a> <a id='n15415' href='#n15415'>15415</a> <a id='n15416' href='#n15416'>15416</a> <a id='n15417' href='#n15417'>15417</a> <a id='n15418' href='#n15418'>15418</a> <a id='n15419' href='#n15419'>15419</a> <a id='n15420' href='#n15420'>15420</a> <a id='n15421' href='#n15421'>15421</a> <a id='n15422' href='#n15422'>15422</a> <a id='n15423' href='#n15423'>15423</a> <a id='n15424' href='#n15424'>15424</a> <a id='n15425' href='#n15425'>15425</a> <a id='n15426' href='#n15426'>15426</a> <a id='n15427' href='#n15427'>15427</a> <a id='n15428' href='#n15428'>15428</a> <a id='n15429' href='#n15429'>15429</a> <a id='n15430' href='#n15430'>15430</a> <a id='n15431' href='#n15431'>15431</a> <a id='n15432' href='#n15432'>15432</a> <a id='n15433' href='#n15433'>15433</a> <a id='n15434' href='#n15434'>15434</a> <a id='n15435' href='#n15435'>15435</a> <a id='n15436' href='#n15436'>15436</a> <a id='n15437' href='#n15437'>15437</a> <a id='n15438' href='#n15438'>15438</a> <a id='n15439' href='#n15439'>15439</a> <a id='n15440' href='#n15440'>15440</a> <a id='n15441' href='#n15441'>15441</a> <a id='n15442' href='#n15442'>15442</a> <a id='n15443' href='#n15443'>15443</a> <a id='n15444' href='#n15444'>15444</a> <a id='n15445' href='#n15445'>15445</a> <a id='n15446' href='#n15446'>15446</a> <a id='n15447' href='#n15447'>15447</a> <a id='n15448' href='#n15448'>15448</a> <a id='n15449' href='#n15449'>15449</a> <a id='n15450' href='#n15450'>15450</a> <a id='n15451' href='#n15451'>15451</a> <a id='n15452' href='#n15452'>15452</a> <a id='n15453' href='#n15453'>15453</a> <a id='n15454' href='#n15454'>15454</a> <a id='n15455' href='#n15455'>15455</a> <a id='n15456' href='#n15456'>15456</a> <a id='n15457' href='#n15457'>15457</a> <a id='n15458' href='#n15458'>15458</a> <a id='n15459' href='#n15459'>15459</a> <a id='n15460' href='#n15460'>15460</a> <a id='n15461' href='#n15461'>15461</a> <a id='n15462' href='#n15462'>15462</a> <a id='n15463' href='#n15463'>15463</a> <a id='n15464' href='#n15464'>15464</a> <a id='n15465' href='#n15465'>15465</a> <a id='n15466' href='#n15466'>15466</a> <a id='n15467' href='#n15467'>15467</a> <a id='n15468' href='#n15468'>15468</a> <a id='n15469' href='#n15469'>15469</a> <a id='n15470' href='#n15470'>15470</a> <a id='n15471' href='#n15471'>15471</a> <a id='n15472' href='#n15472'>15472</a> <a id='n15473' href='#n15473'>15473</a> <a id='n15474' href='#n15474'>15474</a> <a id='n15475' href='#n15475'>15475</a> <a id='n15476' href='#n15476'>15476</a> <a id='n15477' href='#n15477'>15477</a> <a id='n15478' href='#n15478'>15478</a> <a id='n15479' href='#n15479'>15479</a> <a id='n15480' href='#n15480'>15480</a> <a id='n15481' href='#n15481'>15481</a> <a id='n15482' href='#n15482'>15482</a> <a id='n15483' href='#n15483'>15483</a> <a id='n15484' href='#n15484'>15484</a> <a id='n15485' href='#n15485'>15485</a> <a id='n15486' href='#n15486'>15486</a> <a id='n15487' href='#n15487'>15487</a> <a id='n15488' href='#n15488'>15488</a> <a id='n15489' href='#n15489'>15489</a> <a id='n15490' href='#n15490'>15490</a> <a id='n15491' href='#n15491'>15491</a> <a id='n15492' href='#n15492'>15492</a> <a id='n15493' href='#n15493'>15493</a> <a id='n15494' href='#n15494'>15494</a> <a id='n15495' href='#n15495'>15495</a> <a id='n15496' href='#n15496'>15496</a> <a id='n15497' href='#n15497'>15497</a> <a id='n15498' href='#n15498'>15498</a> <a id='n15499' href='#n15499'>15499</a> <a id='n15500' href='#n15500'>15500</a> <a id='n15501' href='#n15501'>15501</a> <a id='n15502' href='#n15502'>15502</a> <a id='n15503' href='#n15503'>15503</a> <a id='n15504' href='#n15504'>15504</a> <a id='n15505' href='#n15505'>15505</a> <a id='n15506' href='#n15506'>15506</a> <a id='n15507' href='#n15507'>15507</a> <a id='n15508' href='#n15508'>15508</a> <a id='n15509' href='#n15509'>15509</a> <a id='n15510' href='#n15510'>15510</a> <a id='n15511' href='#n15511'>15511</a> <a id='n15512' href='#n15512'>15512</a> <a id='n15513' href='#n15513'>15513</a> <a id='n15514' href='#n15514'>15514</a> <a id='n15515' href='#n15515'>15515</a> <a id='n15516' href='#n15516'>15516</a> <a id='n15517' href='#n15517'>15517</a> <a id='n15518' href='#n15518'>15518</a> <a id='n15519' href='#n15519'>15519</a> <a id='n15520' href='#n15520'>15520</a> <a id='n15521' href='#n15521'>15521</a> <a id='n15522' href='#n15522'>15522</a> <a id='n15523' href='#n15523'>15523</a> <a id='n15524' href='#n15524'>15524</a> <a id='n15525' href='#n15525'>15525</a> <a id='n15526' href='#n15526'>15526</a> <a id='n15527' href='#n15527'>15527</a> <a id='n15528' href='#n15528'>15528</a> <a id='n15529' href='#n15529'>15529</a> <a id='n15530' href='#n15530'>15530</a> <a id='n15531' href='#n15531'>15531</a> <a id='n15532' href='#n15532'>15532</a> <a id='n15533' href='#n15533'>15533</a> <a id='n15534' href='#n15534'>15534</a> <a id='n15535' href='#n15535'>15535</a> <a id='n15536' href='#n15536'>15536</a> <a id='n15537' href='#n15537'>15537</a> <a id='n15538' href='#n15538'>15538</a> <a id='n15539' href='#n15539'>15539</a> <a id='n15540' href='#n15540'>15540</a> <a id='n15541' href='#n15541'>15541</a> <a id='n15542' href='#n15542'>15542</a> <a id='n15543' href='#n15543'>15543</a> <a id='n15544' href='#n15544'>15544</a> <a id='n15545' href='#n15545'>15545</a> <a id='n15546' href='#n15546'>15546</a> <a id='n15547' href='#n15547'>15547</a> <a id='n15548' href='#n15548'>15548</a> <a id='n15549' href='#n15549'>15549</a> <a id='n15550' href='#n15550'>15550</a> <a id='n15551' href='#n15551'>15551</a> <a id='n15552' href='#n15552'>15552</a> <a id='n15553' href='#n15553'>15553</a> <a id='n15554' href='#n15554'>15554</a> <a id='n15555' href='#n15555'>15555</a> <a id='n15556' href='#n15556'>15556</a> <a id='n15557' href='#n15557'>15557</a> <a id='n15558' href='#n15558'>15558</a> <a id='n15559' href='#n15559'>15559</a> <a id='n15560' href='#n15560'>15560</a> <a id='n15561' href='#n15561'>15561</a> <a id='n15562' href='#n15562'>15562</a> <a id='n15563' href='#n15563'>15563</a> <a id='n15564' href='#n15564'>15564</a> <a id='n15565' href='#n15565'>15565</a> <a id='n15566' href='#n15566'>15566</a> <a id='n15567' href='#n15567'>15567</a> <a id='n15568' href='#n15568'>15568</a> <a id='n15569' href='#n15569'>15569</a> <a id='n15570' href='#n15570'>15570</a> <a id='n15571' href='#n15571'>15571</a> <a id='n15572' href='#n15572'>15572</a> <a id='n15573' href='#n15573'>15573</a> <a id='n15574' href='#n15574'>15574</a> <a id='n15575' href='#n15575'>15575</a> <a id='n15576' href='#n15576'>15576</a> <a id='n15577' href='#n15577'>15577</a> <a id='n15578' href='#n15578'>15578</a> <a id='n15579' href='#n15579'>15579</a> <a id='n15580' href='#n15580'>15580</a> <a id='n15581' href='#n15581'>15581</a> <a id='n15582' href='#n15582'>15582</a> <a id='n15583' href='#n15583'>15583</a> <a id='n15584' href='#n15584'>15584</a> <a id='n15585' href='#n15585'>15585</a> <a id='n15586' href='#n15586'>15586</a> <a id='n15587' href='#n15587'>15587</a> <a id='n15588' href='#n15588'>15588</a> <a id='n15589' href='#n15589'>15589</a> <a id='n15590' href='#n15590'>15590</a> <a id='n15591' href='#n15591'>15591</a> <a id='n15592' href='#n15592'>15592</a> <a id='n15593' href='#n15593'>15593</a> <a id='n15594' href='#n15594'>15594</a> <a id='n15595' href='#n15595'>15595</a> <a id='n15596' href='#n15596'>15596</a> <a id='n15597' href='#n15597'>15597</a> <a id='n15598' href='#n15598'>15598</a> <a id='n15599' href='#n15599'>15599</a> <a id='n15600' href='#n15600'>15600</a> <a id='n15601' href='#n15601'>15601</a> <a id='n15602' href='#n15602'>15602</a> <a id='n15603' href='#n15603'>15603</a> <a id='n15604' href='#n15604'>15604</a> <a id='n15605' href='#n15605'>15605</a> <a id='n15606' href='#n15606'>15606</a> <a id='n15607' href='#n15607'>15607</a> <a id='n15608' href='#n15608'>15608</a> <a id='n15609' href='#n15609'>15609</a> <a id='n15610' href='#n15610'>15610</a> <a id='n15611' href='#n15611'>15611</a> <a id='n15612' href='#n15612'>15612</a> <a id='n15613' href='#n15613'>15613</a> <a id='n15614' href='#n15614'>15614</a> <a id='n15615' href='#n15615'>15615</a> <a id='n15616' href='#n15616'>15616</a> <a id='n15617' href='#n15617'>15617</a> <a id='n15618' href='#n15618'>15618</a> <a id='n15619' href='#n15619'>15619</a> <a id='n15620' href='#n15620'>15620</a> <a id='n15621' href='#n15621'>15621</a> <a id='n15622' href='#n15622'>15622</a> <a id='n15623' href='#n15623'>15623</a> <a id='n15624' href='#n15624'>15624</a> <a id='n15625' href='#n15625'>15625</a> <a id='n15626' href='#n15626'>15626</a> <a id='n15627' href='#n15627'>15627</a> <a id='n15628' href='#n15628'>15628</a> <a id='n15629' href='#n15629'>15629</a> <a id='n15630' href='#n15630'>15630</a> <a id='n15631' href='#n15631'>15631</a> <a id='n15632' href='#n15632'>15632</a> <a id='n15633' href='#n15633'>15633</a> <a id='n15634' href='#n15634'>15634</a> <a id='n15635' href='#n15635'>15635</a> <a id='n15636' href='#n15636'>15636</a> <a id='n15637' href='#n15637'>15637</a> <a id='n15638' href='#n15638'>15638</a> <a id='n15639' href='#n15639'>15639</a> <a id='n15640' href='#n15640'>15640</a> <a id='n15641' href='#n15641'>15641</a> <a id='n15642' href='#n15642'>15642</a> <a id='n15643' href='#n15643'>15643</a> <a id='n15644' href='#n15644'>15644</a> <a id='n15645' href='#n15645'>15645</a> <a id='n15646' href='#n15646'>15646</a> <a id='n15647' href='#n15647'>15647</a> <a id='n15648' href='#n15648'>15648</a> <a id='n15649' href='#n15649'>15649</a> <a id='n15650' href='#n15650'>15650</a> <a id='n15651' href='#n15651'>15651</a> <a id='n15652' href='#n15652'>15652</a> <a id='n15653' href='#n15653'>15653</a> <a id='n15654' href='#n15654'>15654</a> <a id='n15655' href='#n15655'>15655</a> <a id='n15656' href='#n15656'>15656</a> <a id='n15657' href='#n15657'>15657</a> <a id='n15658' href='#n15658'>15658</a> <a id='n15659' href='#n15659'>15659</a> <a id='n15660' href='#n15660'>15660</a> <a id='n15661' href='#n15661'>15661</a> <a id='n15662' href='#n15662'>15662</a> <a id='n15663' href='#n15663'>15663</a> <a id='n15664' href='#n15664'>15664</a> <a id='n15665' href='#n15665'>15665</a> <a id='n15666' href='#n15666'>15666</a> <a id='n15667' href='#n15667'>15667</a> <a id='n15668' href='#n15668'>15668</a> <a id='n15669' href='#n15669'>15669</a> <a id='n15670' href='#n15670'>15670</a> <a id='n15671' href='#n15671'>15671</a> <a id='n15672' href='#n15672'>15672</a> <a id='n15673' href='#n15673'>15673</a> <a id='n15674' href='#n15674'>15674</a> <a id='n15675' href='#n15675'>15675</a> <a id='n15676' href='#n15676'>15676</a> <a id='n15677' href='#n15677'>15677</a> <a id='n15678' href='#n15678'>15678</a> <a id='n15679' href='#n15679'>15679</a> <a id='n15680' href='#n15680'>15680</a> <a id='n15681' href='#n15681'>15681</a> <a id='n15682' href='#n15682'>15682</a> <a id='n15683' href='#n15683'>15683</a> <a id='n15684' href='#n15684'>15684</a> <a id='n15685' href='#n15685'>15685</a> <a id='n15686' href='#n15686'>15686</a> <a id='n15687' href='#n15687'>15687</a> <a id='n15688' href='#n15688'>15688</a> <a id='n15689' href='#n15689'>15689</a> <a id='n15690' href='#n15690'>15690</a> <a id='n15691' href='#n15691'>15691</a> <a id='n15692' href='#n15692'>15692</a> <a id='n15693' href='#n15693'>15693</a> <a id='n15694' href='#n15694'>15694</a> <a id='n15695' href='#n15695'>15695</a> <a id='n15696' href='#n15696'>15696</a> <a id='n15697' href='#n15697'>15697</a> <a id='n15698' href='#n15698'>15698</a> <a id='n15699' href='#n15699'>15699</a> <a id='n15700' href='#n15700'>15700</a> <a id='n15701' href='#n15701'>15701</a> <a id='n15702' href='#n15702'>15702</a> <a id='n15703' href='#n15703'>15703</a> <a id='n15704' href='#n15704'>15704</a> <a id='n15705' href='#n15705'>15705</a> <a id='n15706' href='#n15706'>15706</a> <a id='n15707' href='#n15707'>15707</a> <a id='n15708' href='#n15708'>15708</a> <a id='n15709' href='#n15709'>15709</a> <a id='n15710' href='#n15710'>15710</a> <a id='n15711' href='#n15711'>15711</a> <a id='n15712' href='#n15712'>15712</a> <a id='n15713' href='#n15713'>15713</a> <a id='n15714' href='#n15714'>15714</a> <a id='n15715' href='#n15715'>15715</a> <a id='n15716' href='#n15716'>15716</a> <a id='n15717' href='#n15717'>15717</a> <a id='n15718' href='#n15718'>15718</a> <a id='n15719' href='#n15719'>15719</a> <a id='n15720' href='#n15720'>15720</a> <a id='n15721' href='#n15721'>15721</a> <a id='n15722' href='#n15722'>15722</a> <a id='n15723' href='#n15723'>15723</a> <a id='n15724' href='#n15724'>15724</a> <a id='n15725' href='#n15725'>15725</a> <a id='n15726' href='#n15726'>15726</a> <a id='n15727' href='#n15727'>15727</a> <a id='n15728' href='#n15728'>15728</a> <a id='n15729' href='#n15729'>15729</a> <a id='n15730' href='#n15730'>15730</a> <a id='n15731' href='#n15731'>15731</a> <a id='n15732' href='#n15732'>15732</a> <a id='n15733' href='#n15733'>15733</a> <a id='n15734' href='#n15734'>15734</a> <a id='n15735' href='#n15735'>15735</a> <a id='n15736' href='#n15736'>15736</a> <a id='n15737' href='#n15737'>15737</a> <a id='n15738' href='#n15738'>15738</a> <a id='n15739' href='#n15739'>15739</a> <a id='n15740' href='#n15740'>15740</a> <a id='n15741' href='#n15741'>15741</a> <a id='n15742' href='#n15742'>15742</a> <a id='n15743' href='#n15743'>15743</a> <a id='n15744' href='#n15744'>15744</a> <a id='n15745' href='#n15745'>15745</a> <a id='n15746' href='#n15746'>15746</a> <a id='n15747' href='#n15747'>15747</a> <a id='n15748' href='#n15748'>15748</a> <a id='n15749' href='#n15749'>15749</a> <a id='n15750' href='#n15750'>15750</a> <a id='n15751' href='#n15751'>15751</a> <a id='n15752' href='#n15752'>15752</a> <a id='n15753' href='#n15753'>15753</a> <a id='n15754' href='#n15754'>15754</a> <a id='n15755' href='#n15755'>15755</a> <a id='n15756' href='#n15756'>15756</a> <a id='n15757' href='#n15757'>15757</a> <a id='n15758' href='#n15758'>15758</a> <a id='n15759' href='#n15759'>15759</a> <a id='n15760' href='#n15760'>15760</a> <a id='n15761' href='#n15761'>15761</a> <a id='n15762' href='#n15762'>15762</a> <a id='n15763' href='#n15763'>15763</a> <a id='n15764' href='#n15764'>15764</a> <a id='n15765' href='#n15765'>15765</a> <a id='n15766' href='#n15766'>15766</a> <a id='n15767' href='#n15767'>15767</a> <a id='n15768' href='#n15768'>15768</a> <a id='n15769' href='#n15769'>15769</a> <a id='n15770' href='#n15770'>15770</a> <a id='n15771' href='#n15771'>15771</a> <a id='n15772' href='#n15772'>15772</a> <a id='n15773' href='#n15773'>15773</a> <a id='n15774' href='#n15774'>15774</a> <a id='n15775' href='#n15775'>15775</a> <a id='n15776' href='#n15776'>15776</a> <a id='n15777' href='#n15777'>15777</a> <a id='n15778' href='#n15778'>15778</a> <a id='n15779' href='#n15779'>15779</a> <a id='n15780' href='#n15780'>15780</a> <a id='n15781' href='#n15781'>15781</a> <a id='n15782' href='#n15782'>15782</a> <a id='n15783' href='#n15783'>15783</a> <a id='n15784' href='#n15784'>15784</a> <a id='n15785' href='#n15785'>15785</a> <a id='n15786' href='#n15786'>15786</a> <a id='n15787' href='#n15787'>15787</a> <a id='n15788' href='#n15788'>15788</a> <a id='n15789' href='#n15789'>15789</a> <a id='n15790' href='#n15790'>15790</a> <a id='n15791' href='#n15791'>15791</a> <a id='n15792' href='#n15792'>15792</a> <a id='n15793' href='#n15793'>15793</a> <a id='n15794' href='#n15794'>15794</a> <a id='n15795' href='#n15795'>15795</a> <a id='n15796' href='#n15796'>15796</a> <a id='n15797' href='#n15797'>15797</a> <a id='n15798' href='#n15798'>15798</a> <a id='n15799' href='#n15799'>15799</a> <a id='n15800' href='#n15800'>15800</a> <a id='n15801' href='#n15801'>15801</a> <a id='n15802' href='#n15802'>15802</a> <a id='n15803' href='#n15803'>15803</a> <a id='n15804' href='#n15804'>15804</a> <a id='n15805' href='#n15805'>15805</a> <a id='n15806' href='#n15806'>15806</a> <a id='n15807' href='#n15807'>15807</a> <a id='n15808' href='#n15808'>15808</a> <a id='n15809' href='#n15809'>15809</a> <a id='n15810' href='#n15810'>15810</a> <a id='n15811' href='#n15811'>15811</a> <a id='n15812' href='#n15812'>15812</a> <a id='n15813' href='#n15813'>15813</a> <a id='n15814' href='#n15814'>15814</a> <a id='n15815' href='#n15815'>15815</a> <a id='n15816' href='#n15816'>15816</a> <a id='n15817' href='#n15817'>15817</a> <a id='n15818' href='#n15818'>15818</a> <a id='n15819' href='#n15819'>15819</a> <a id='n15820' href='#n15820'>15820</a> <a id='n15821' href='#n15821'>15821</a> <a id='n15822' href='#n15822'>15822</a> <a id='n15823' href='#n15823'>15823</a> <a id='n15824' href='#n15824'>15824</a> <a id='n15825' href='#n15825'>15825</a> <a id='n15826' href='#n15826'>15826</a> <a id='n15827' href='#n15827'>15827</a> <a id='n15828' href='#n15828'>15828</a> <a id='n15829' href='#n15829'>15829</a> <a id='n15830' href='#n15830'>15830</a> <a id='n15831' href='#n15831'>15831</a> <a id='n15832' href='#n15832'>15832</a> <a id='n15833' href='#n15833'>15833</a> <a id='n15834' href='#n15834'>15834</a> <a id='n15835' href='#n15835'>15835</a> <a id='n15836' href='#n15836'>15836</a> <a id='n15837' href='#n15837'>15837</a> <a id='n15838' href='#n15838'>15838</a> <a id='n15839' href='#n15839'>15839</a> <a id='n15840' href='#n15840'>15840</a> <a id='n15841' href='#n15841'>15841</a> <a id='n15842' href='#n15842'>15842</a> <a id='n15843' href='#n15843'>15843</a> <a id='n15844' href='#n15844'>15844</a> <a id='n15845' href='#n15845'>15845</a> <a id='n15846' href='#n15846'>15846</a> <a id='n15847' href='#n15847'>15847</a> <a id='n15848' href='#n15848'>15848</a> <a id='n15849' href='#n15849'>15849</a> <a id='n15850' href='#n15850'>15850</a> <a id='n15851' href='#n15851'>15851</a> <a id='n15852' href='#n15852'>15852</a> <a id='n15853' href='#n15853'>15853</a> <a id='n15854' href='#n15854'>15854</a> <a id='n15855' href='#n15855'>15855</a> <a id='n15856' href='#n15856'>15856</a> <a id='n15857' href='#n15857'>15857</a> <a id='n15858' href='#n15858'>15858</a> <a id='n15859' href='#n15859'>15859</a> <a id='n15860' href='#n15860'>15860</a> <a id='n15861' href='#n15861'>15861</a> <a id='n15862' href='#n15862'>15862</a> <a id='n15863' href='#n15863'>15863</a> <a id='n15864' href='#n15864'>15864</a> <a id='n15865' href='#n15865'>15865</a> <a id='n15866' href='#n15866'>15866</a> <a id='n15867' href='#n15867'>15867</a> <a id='n15868' href='#n15868'>15868</a> <a id='n15869' href='#n15869'>15869</a> <a id='n15870' href='#n15870'>15870</a> <a id='n15871' href='#n15871'>15871</a> <a id='n15872' href='#n15872'>15872</a> <a id='n15873' href='#n15873'>15873</a> </pre></td> <td class='lines'><pre><code><span class="hl com">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span> <span class="hl com"> * Copyright by The HDF Group. *</span> <span class="hl com"> * Copyright by the Board of Trustees of the University of Illinois. *</span> <span class="hl com"> * All rights reserved. *</span> <span class="hl com"> * *</span> <span class="hl com"> * This file is part of HDF5. The full HDF5 copyright notice, including *</span> <span class="hl com"> * terms governing use, modification, and redistribution, is contained in *</span> <span class="hl com"> * the COPYING file, which can be found at the root of the source code *</span> <span class="hl com"> * distribution tree, or in https://www.hdfgroup.org/licenses. *</span> <span class="hl com"> * If you do not have access to either file, you may request a copy from *</span> <span class="hl com"> * help@hdfgroup.org. *</span> <span class="hl com"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span> <span class="hl com">/*</span> <span class="hl com"> * Programmer: Robb Matzke</span> <span class="hl com"> * Tuesday, December 9, 1997</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests the dataset interface (H5D)</span> <span class="hl com"> */</span> <span class="hl ppc">#define H5D_FRIEND</span> <span class="hl com">/*suppress error about including H5Dpkg */</span><span class="hl ppc"></span> <span class="hl ppc">#define H5D_TESTING</span> <span class="hl ppc">#define H5FD_FRIEND</span> <span class="hl com">/*suppress error about including H5FDpkg */</span><span class="hl ppc"></span> <span class="hl ppc">#define H5FD_TESTING</span> <span class="hl ppc">#define H5Z_FRIEND</span> <span class="hl com">/*suppress error about including H5Zpkg */</span><span class="hl ppc"></span> <span class="hl ppc">#include</span> <span class="hl pps">"testhdf5.h"</span><span class="hl ppc"></span> <span class="hl ppc">#include</span> <span class="hl pps">"H5srcdir.h"</span><span class="hl ppc"></span> <span class="hl ppc">#include</span> <span class="hl pps">"H5CXprivate.h"</span><span class="hl ppc"></span> <span class="hl com">/* API Contexts */</span><span class="hl ppc"></span> <span class="hl ppc">#include</span> <span class="hl pps">"H5Iprivate.h"</span><span class="hl ppc"></span> <span class="hl ppc">#include</span> <span class="hl pps">"H5Pprivate.h"</span><span class="hl ppc"></span> <span class="hl ppc">#define H5F_FRIEND</span> <span class="hl com">/*suppress error about including H5Fpkg */</span><span class="hl ppc"></span> <span class="hl ppc">#define H5F_TESTING</span> <span class="hl ppc">#include</span> <span class="hl pps">"H5Fpkg.h"</span><span class="hl ppc"></span> <span class="hl com">/* File access */</span><span class="hl ppc"></span> <span class="hl ppc">#define H5S_FRIEND</span> <span class="hl com">/*suppress error about including H5Spkg */</span><span class="hl ppc"></span> <span class="hl ppc">#include</span> <span class="hl pps">"H5Spkg.h"</span><span class="hl ppc"></span> <span class="hl com">/* Dataspace */</span><span class="hl ppc"></span> <span class="hl ppc">#define H5T_FRIEND</span> <span class="hl com">/*suppress error about including H5Tpkg */</span><span class="hl ppc"></span> <span class="hl ppc">#include</span> <span class="hl pps">"H5Tpkg.h"</span><span class="hl ppc"></span> <span class="hl com">/* Datatype */</span><span class="hl ppc"></span> <span class="hl ppc">#define H5A_FRIEND</span> <span class="hl com">/*suppress error about including H5Apkg */</span><span class="hl ppc"></span> <span class="hl ppc">#include</span> <span class="hl pps">"H5Apkg.h"</span><span class="hl ppc"></span> <span class="hl com">/* Attributes */</span><span class="hl ppc"></span> <span class="hl com">/* Use in version bound test */</span> <span class="hl ppc">#define H5O_FRIEND</span> <span class="hl com">/*suppress error about including H5Opkg */</span><span class="hl ppc"></span> <span class="hl ppc">#include</span> <span class="hl pps">"H5Opkg.h"</span><span class="hl ppc"></span> <span class="hl com">/* Object headers */</span><span class="hl ppc"></span> <span class="hl ppc">#include</span> <span class="hl pps">"H5Dpkg.h"</span><span class="hl ppc"></span> <span class="hl ppc">#include</span> <span class="hl pps">"H5FDpkg.h"</span><span class="hl ppc"></span> <span class="hl ppc">#include</span> <span class="hl pps">"H5VMprivate.h"</span><span class="hl ppc"></span> <span class="hl ppc">#include</span> <span class="hl pps">"H5Zpkg.h"</span><span class="hl ppc"></span> <span class="hl ppc">#ifdef H5_HAVE_SZLIB_H</span> <span class="hl ppc">#include</span> <span class="hl pps">"szlib.h"</span><span class="hl ppc"></span> <span class="hl ppc">#endif</span> <span class="hl kwb">const char</span> <span class="hl opt">*</span>FILENAME<span class="hl opt">[] = {</span><span class="hl str">"dataset"</span><span class="hl opt">,</span> <span class="hl com">/* 0 */</span> <span class="hl str">"compact_dataset"</span><span class="hl opt">,</span> <span class="hl com">/* 1 */</span> <span class="hl str">"dset_offset"</span><span class="hl opt">,</span> <span class="hl com">/* 2 */</span> <span class="hl str">"max_compact_dataset"</span><span class="hl opt">,</span> <span class="hl com">/* 3 */</span> <span class="hl str">"simple"</span><span class="hl opt">,</span> <span class="hl com">/* 4 */</span> <span class="hl str">"set_local"</span><span class="hl opt">,</span> <span class="hl com">/* 5 */</span> <span class="hl str">"random_chunks"</span><span class="hl opt">,</span> <span class="hl com">/* 6 */</span> <span class="hl str">"huge_chunks"</span><span class="hl opt">,</span> <span class="hl com">/* 7 */</span> <span class="hl str">"chunk_cache"</span><span class="hl opt">,</span> <span class="hl com">/* 8 */</span> <span class="hl str">"big_chunk"</span><span class="hl opt">,</span> <span class="hl com">/* 9 */</span> <span class="hl str">"chunk_fast"</span><span class="hl opt">,</span> <span class="hl com">/* 10 */</span> <span class="hl str">"chunk_expand"</span><span class="hl opt">,</span> <span class="hl com">/* 11 */</span> <span class="hl str">"chunk_fixed"</span><span class="hl opt">,</span> <span class="hl com">/* 12 */</span> <span class="hl str">"copy_dcpl_newfile"</span><span class="hl opt">,</span> <span class="hl com">/* 13 */</span> <span class="hl str">"partial_chunks"</span><span class="hl opt">,</span> <span class="hl com">/* 14 */</span> <span class="hl str">"layout_extend"</span><span class="hl opt">,</span> <span class="hl com">/* 15 */</span> <span class="hl str">"zero_chunk"</span><span class="hl opt">,</span> <span class="hl com">/* 16 */</span> <span class="hl str">"chunk_single"</span><span class="hl opt">,</span> <span class="hl com">/* 17 */</span> <span class="hl str">"swmr_non_latest"</span><span class="hl opt">,</span> <span class="hl com">/* 18 */</span> <span class="hl str">"earray_hdr_fd"</span><span class="hl opt">,</span> <span class="hl com">/* 19 */</span> <span class="hl str">"farray_hdr_fd"</span><span class="hl opt">,</span> <span class="hl com">/* 20 */</span> <span class="hl str">"bt2_hdr_fd"</span><span class="hl opt">,</span> <span class="hl com">/* 21 */</span> <span class="hl str">"storage_size"</span><span class="hl opt">,</span> <span class="hl com">/* 22 */</span> <span class="hl str">"dls_01_strings"</span><span class="hl opt">,</span> <span class="hl com">/* 23 */</span> <span class="hl str">"power2up"</span><span class="hl opt">,</span> <span class="hl com">/* 24 */</span> <span class="hl str">"version_bounds"</span><span class="hl opt">,</span> <span class="hl com">/* 25 */</span> <span class="hl str">"alloc_0sized"</span><span class="hl opt">,</span> <span class="hl com">/* 26 */</span> <span class="hl str">"h5s_block"</span><span class="hl opt">,</span> <span class="hl com">/* 27 */</span> <span class="hl str">"h5s_plist"</span><span class="hl opt">,</span> <span class="hl com">/* 28 */</span> NULL<span class="hl opt">};</span> <span class="hl ppc">#define OHMIN_FILENAME_A</span> <span class="hl pps">"ohdr_min_a"</span><span class="hl ppc"></span> <span class="hl ppc">#define FILENAME_BUF_SIZE 1024</span> <span class="hl ppc">#define KB 1024</span> <span class="hl ppc">#define FILE_DEFLATE_NAME</span> <span class="hl pps">"deflate.h5"</span><span class="hl ppc"></span> <span class="hl com">/* Dataset names for testing filters */</span> <span class="hl ppc">#define DSET_DEFAULT_NAME</span> <span class="hl pps">"default"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_CHUNKED_NAME</span> <span class="hl pps">"chunked"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_COMPACT_NAME</span> <span class="hl pps">"compact"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_SIMPLE_IO_NAME</span> <span class="hl pps">"simple_io"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_USERBLOCK_IO_NAME</span> <span class="hl pps">"userblock_io"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_COMPACT_IO_NAME</span> <span class="hl pps">"compact_io"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_COMPACT_MAX_NAME</span> <span class="hl pps">"max_compact"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_COMPACT_MAX2_NAME</span> <span class="hl pps">"max_compact_2"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_CONV_BUF_NAME</span> <span class="hl pps">"conv_buf"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_TCONV_NAME</span> <span class="hl pps">"tconv"</span><span class="hl ppc"></span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_DEFLATE</span> <span class="hl ppc">#define DSET_DEFLATE_NAME</span> <span class="hl pps">"deflate"</span><span class="hl ppc"></span> <span class="hl ppc">#endif</span> <span class="hl ppc">#define DSET_SHUFFLE_NAME</span> <span class="hl pps">"shuffle"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_FLETCHER32_NAME</span> <span class="hl pps">"fletcher32"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_FLETCHER32_NAME_2</span> <span class="hl pps">"fletcher32_2"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_FLETCHER32_NAME_3</span> <span class="hl pps">"fletcher32_3"</span><span class="hl ppc"></span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_DEFLATE</span> <span class="hl ppc">#define DSET_SHUF_DEF_FLET_NAME</span> <span class="hl pps">"shuffle+deflate+fletcher32"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_SHUF_DEF_FLET_NAME_2</span> <span class="hl pps">"shuffle+deflate+fletcher32_2"</span><span class="hl ppc"></span> <span class="hl ppc">#endif</span> <span class="hl ppc">#define DSET_OPTIONAL_SCALAR</span> <span class="hl pps">"dataset_with_scalar_space"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_OPTIONAL_VLEN</span> <span class="hl pps">"dataset_with_vlen_type"</span><span class="hl ppc"></span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_SZIP</span> <span class="hl ppc">#define DSET_SZIP_NAME</span> <span class="hl pps">"szip"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_SHUF_SZIP_FLET_NAME</span> <span class="hl pps">"shuffle+szip+fletcher32"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_SHUF_SZIP_FLET_NAME_2</span> <span class="hl pps">"shuffle+szip+fletcher32_2"</span><span class="hl ppc"></span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_SZIP */</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_BOGUS_NAME</span> <span class="hl pps">"bogus"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_MISSING_NAME</span> <span class="hl pps">"missing"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_CAN_APPLY_NAME</span> <span class="hl pps">"can_apply"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_CAN_APPLY_NAME2</span> <span class="hl pps">"can_apply2"</span><span class="hl ppc"></span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_SZIP</span> <span class="hl ppc">#define DSET_CAN_APPLY_SZIP_NAME</span> <span class="hl pps">"can_apply_szip"</span><span class="hl ppc"></span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_SZIP */</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_SET_LOCAL_NAME</span> <span class="hl pps">"set_local"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_SET_LOCAL_NAME_2</span> <span class="hl pps">"set_local_2"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_ONEBYTE_SHUF_NAME</span> <span class="hl pps">"onebyte_shuffle"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_NBIT_INT_NAME</span> <span class="hl pps">"nbit_int"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_NBIT_FLOAT_NAME</span> <span class="hl pps">"nbit_float"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_NBIT_DOUBLE_NAME</span> <span class="hl pps">"nbit_double"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_NBIT_ARRAY_NAME</span> <span class="hl pps">"nbit_array"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_NBIT_COMPOUND_NAME</span> <span class="hl pps">"nbit_compound"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_NBIT_COMPOUND_NAME_2</span> <span class="hl pps">"nbit_compound_2"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_NBIT_COMPOUND_NAME_3</span> <span class="hl pps">"nbit_compound_3"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_NBIT_INT_SIZE_NAME</span> <span class="hl pps">"nbit_int_size"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_NBIT_FLT_SIZE_NAME</span> <span class="hl pps">"nbit_flt_size"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_SCALEOFFSET_INT_NAME</span> <span class="hl pps">"scaleoffset_int"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_SCALEOFFSET_INT_NAME_2</span> <span class="hl pps">"scaleoffset_int_2"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_SCALEOFFSET_FLOAT_NAME</span> <span class="hl pps">"scaleoffset_float"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_SCALEOFFSET_FLOAT_NAME_2</span> <span class="hl pps">"scaleoffset_float_2"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_SCALEOFFSET_DOUBLE_NAME</span> <span class="hl pps">"scaleoffset_double"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_SCALEOFFSET_DOUBLE_NAME_2</span> <span class="hl pps">"scaleoffset_double_2"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_COMPARE_DCPL_NAME</span> <span class="hl pps">"compare_dcpl"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_COMPARE_DCPL_NAME_2</span> <span class="hl pps">"compare_dcpl_2"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_COPY_DCPL_NAME_1</span> <span class="hl pps">"copy_dcpl_1"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_COPY_DCPL_NAME_2</span> <span class="hl pps">"copy_dcpl_2"</span><span class="hl ppc"></span> <span class="hl ppc">#define COPY_DCPL_EXTFILE_NAME</span> <span class="hl pps">"ext_file"</span><span class="hl ppc"></span> <span class="hl ppc">#ifndef H5_NO_DEPRECATED_SYMBOLS</span> <span class="hl ppc">#define DSET_DEPREC_NAME</span> <span class="hl pps">"deprecated"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_DEPREC_NAME_CHUNKED</span> <span class="hl pps">"deprecated_chunked"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_DEPREC_NAME_COMPACT</span> <span class="hl pps">"deprecated_compact"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_DEPREC_NAME_FILTER</span> <span class="hl pps">"deprecated_filter"</span><span class="hl ppc"></span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_NO_DEPRECATED_SYMBOLS */</span><span class="hl ppc"></span> <span class="hl com">/* Dataset names for testing Fixed Array Indexing */</span> <span class="hl ppc">#define DSET_FIXED_MAX</span> <span class="hl pps">"DSET_FIXED_MAX"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_FIXED_NOMAX</span> <span class="hl pps">"DSET_FIXED_NOMAX"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_FIXED_BIG</span> <span class="hl pps">"DSET_FIXED_BIG"</span><span class="hl ppc"></span> <span class="hl ppc">#define POINTS 72</span> <span class="hl ppc">#define POINTS_BIG 2500</span> <span class="hl com">/* Dataset names used for testing header flush dependencies */</span> <span class="hl ppc">#define DSET_EARRAY_HDR_FD</span> <span class="hl pps">"earray_hdr_fd"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_FARRAY_HDR_FD</span> <span class="hl pps">"farray_hdr_fd"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_BT2_HDR_FD</span> <span class="hl pps">"bt2_hdr_fd"</span><span class="hl ppc"></span> <span class="hl com">/* Dataset names for testing Implicit Indexing */</span> <span class="hl ppc">#define DSET_SINGLE_MAX</span> <span class="hl pps">"DSET_SINGLE_MAX"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_SINGLE_NOMAX</span> <span class="hl pps">"DSET_SINGLE_NOMAX"</span><span class="hl ppc"></span> <span class="hl ppc">#define USER_BLOCK 1024</span> <span class="hl ppc">#define SIXTY_FOUR_KB 65536</span> <span class="hl com">/* Temporary filter IDs used for testing */</span> <span class="hl ppc">#define H5Z_FILTER_BOGUS 305</span> <span class="hl ppc">#define H5Z_FILTER_CORRUPT 306</span> <span class="hl ppc">#define H5Z_FILTER_CAN_APPLY_TEST 307</span> <span class="hl ppc">#define H5Z_FILTER_SET_LOCAL_TEST 308</span> <span class="hl ppc">#ifndef H5_NO_DEPRECATED_SYMBOLS</span> <span class="hl ppc">#define H5Z_FILTER_DEPREC 309</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_NO_DEPRECATED_SYMBOLS */</span><span class="hl ppc"></span> <span class="hl ppc">#define H5Z_FILTER_EXPAND 310</span> <span class="hl ppc">#define H5Z_FILTER_CAN_APPLY_TEST2 311</span> <span class="hl ppc">#define H5Z_FILTER_COUNT 312</span> <span class="hl com">/* Flags for testing filters */</span> <span class="hl ppc">#define DISABLE_FLETCHER32 0</span> <span class="hl ppc">#define ENABLE_FLETCHER32 1</span> <span class="hl ppc">#define DATA_CORRUPTED 1</span> <span class="hl ppc">#define DATA_NOT_CORRUPTED 0</span> <span class="hl com">/* Parameters for the "set local" test */</span> <span class="hl ppc">#define BOGUS2_PERM_NPARMS 2</span> <span class="hl com">/* Number of "permanent" parameters */</span><span class="hl ppc"></span> <span class="hl ppc">#define BOGUS2_PARAM_1 13</span> <span class="hl com">/* (No particular meaning, just for checking value) */</span><span class="hl ppc"></span> <span class="hl ppc">#define BOGUS2_PARAM_2 35</span> <span class="hl com">/* (No particular meaning, just for checking value) */</span><span class="hl ppc"></span> <span class="hl ppc">#define BOGUS2_ALL_NPARMS 4</span> <span class="hl com">/* Total number of parameter = permanent + "local" parameters */</span><span class="hl ppc"></span> <span class="hl com">/* Dimensionality for conversion buffer test */</span> <span class="hl ppc">#define DIM1 100</span> <span class="hl com">/* Dim. Size of data member # 1 */</span><span class="hl ppc"></span> <span class="hl ppc">#define DIM2 5000</span> <span class="hl com">/* Dim. Size of data member # 2 */</span><span class="hl ppc"></span> <span class="hl ppc">#define DIM3 10</span> <span class="hl com">/* Dim. Size of data member # 3 */</span><span class="hl ppc"></span> <span class="hl com">/* Parameters for internal filter test */</span> <span class="hl ppc">#define FILTER_CHUNK_DIM1 2</span> <span class="hl ppc">#define FILTER_CHUNK_DIM2 25</span> <span class="hl ppc">#define FILTER_HS_OFFSET1 7</span> <span class="hl ppc">#define FILTER_HS_OFFSET2 30</span> <span class="hl ppc">#define FILTER_HS_SIZE1 4</span> <span class="hl ppc">#define FILTER_HS_SIZE2 50</span> <span class="hl com">/* Names for noencoder test */</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_SZIP</span> <span class="hl ppc">#define NOENCODER_FILENAME</span> <span class="hl pps">"noencoder.h5"</span><span class="hl ppc"></span> <span class="hl ppc">#define NOENCODER_COPY_FILENAME</span> <span class="hl pps">"noencoder.h5.copy"</span><span class="hl ppc"></span> <span class="hl ppc">#define NOENCODER_TEST_DATASET</span> <span class="hl pps">"noencoder_tdset.h5"</span><span class="hl ppc"></span> <span class="hl ppc">#define NOENCODER_SZIP_DATASET</span> <span class="hl pps">"noencoder_szip_dset.h5"</span><span class="hl ppc"></span> <span class="hl ppc">#define NOENCODER_SZIP_SHUFF_FLETCH_DATASET</span> <span class="hl pps">"noencoder_szip_shuffle_fletcher_dset.h5"</span><span class="hl ppc"></span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_SZIP */</span><span class="hl ppc"></span> <span class="hl com">/* Names for zero-dim test */</span> <span class="hl ppc">#define ZERODIM_DATASET</span> <span class="hl pps">"zerodim"</span><span class="hl ppc"></span> <span class="hl ppc">#define ZERODIM_DATASET2</span> <span class="hl pps">"zerodim2"</span><span class="hl ppc"></span> <span class="hl com">/* Parameters for zero-dim test */</span> <span class="hl ppc">#define MISSING_CHUNK_DATASET</span> <span class="hl pps">"missing_chunk"</span><span class="hl ppc"></span> <span class="hl ppc">#define MISSING_CHUNK_DATASET2</span> <span class="hl pps">"missing_chunk2"</span><span class="hl ppc"></span> <span class="hl ppc">#define MISSING_CHUNK_DIM 100</span> <span class="hl com">/* Names for random chunks test */</span> <span class="hl ppc">#define NPOINTS 50</span> <span class="hl com">/* Parameters for huge chunks test */</span> <span class="hl ppc">#define HUGE_DATASET</span> <span class="hl pps">"Dataset"</span><span class="hl ppc"></span> <span class="hl ppc">#define HUGE_DIM ((hsize_t)16 * 1024 * 1024 * 1024)</span> <span class="hl ppc">#define HUGE_CHUNK_DIM ((hsize_t)2 * 1024 * 1024 * 1024)</span> <span class="hl ppc">#define TOO_HUGE_CHUNK_DIM ((hsize_t)4 * 1024 * 1024 * 1024)</span> <span class="hl ppc">#define HUGE_DATASET2</span> <span class="hl pps">"Dataset2"</span><span class="hl ppc"></span> <span class="hl ppc">#define HUGE_DIM2_0 ((hsize_t)16 * 1024)</span> <span class="hl ppc">#define HUGE_DIM2_1 ((hsize_t)16 * 1024)</span> <span class="hl ppc">#define HUGE_DIM2_2 ((hsize_t)16 * 1024)</span> <span class="hl ppc">#define HUGE_CHUNK_DIM2_0 ((hsize_t)2 * 1024)</span> <span class="hl ppc">#define HUGE_CHUNK_DIM2_1 ((hsize_t)1024)</span> <span class="hl ppc">#define HUGE_CHUNK_DIM2_2 ((hsize_t)1024)</span> <span class="hl ppc">#define TOO_HUGE_CHUNK_DIM2_0 ((hsize_t)4 * 1024)</span> <span class="hl ppc">#define TOO_HUGE_CHUNK_DIM2_1 ((hsize_t)1024)</span> <span class="hl ppc">#define TOO_HUGE_CHUNK_DIM2_2 ((hsize_t)1024)</span> <span class="hl com">/* Parameters for testing bypassing chunk cache */</span> <span class="hl ppc">#define BYPASS_DATASET1</span> <span class="hl pps">"Dset1"</span><span class="hl ppc"></span> <span class="hl ppc">#define BYPASS_DATASET2</span> <span class="hl pps">"Dset2"</span><span class="hl ppc"></span> <span class="hl ppc">#define T_BYPASS_DATASET1</span> <span class="hl pps">"T_Dset1"</span><span class="hl ppc"></span> <span class="hl ppc">#define T_BYPASS_DATASET2</span> <span class="hl pps">"T_Dset2"</span><span class="hl ppc"></span> <span class="hl ppc">#define BYPASS_DIM 1000</span> <span class="hl ppc">#define BYPASS_CHUNK_DIM 500</span> <span class="hl ppc">#define BYPASS_FILL_VALUE 7</span> <span class="hl com">/* Parameters for testing extensible array chunk indices */</span> <span class="hl ppc">#define EARRAY_MAX_RANK 3</span> <span class="hl ppc">#define EARRAY_DSET_DIM 15</span> <span class="hl ppc">#define EARRAY_CHUNK_DIM 3</span> <span class="hl ppc">#define EARRAY_EXTEND_INCR 15</span> <span class="hl ppc">#define EARRAY_MAX_EXTEND 75</span> <span class="hl com">/* Parameters for datasets in query storage size tests */</span> <span class="hl ppc">#define STORAGE_SIZE_DIM1 12</span> <span class="hl ppc">#define STORAGE_SIZE_DIM2 6</span> <span class="hl ppc">#define STORAGE_SIZE_MAX_DIM1 100</span> <span class="hl ppc">#define STORAGE_SIZE_MAX_DIM2 80</span> <span class="hl ppc">#define STORAGE_SIZE_CHUNK_DIM1 5</span> <span class="hl ppc">#define STORAGE_SIZE_CHUNK_DIM2 5</span> <span class="hl com">/* Shared global arrays */</span> <span class="hl ppc">#define DSET_DIM1 100</span> <span class="hl ppc">#define DSET_DIM2 200</span> <span class="hl kwb">int</span> <span class="hl opt">**</span> points <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">int</span> <span class="hl opt">*</span> points_data <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">double</span> <span class="hl opt">**</span>points_dbl <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">double</span> <span class="hl opt">*</span> points_dbl_data <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">int</span> <span class="hl opt">**</span> check <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">int</span> <span class="hl opt">*</span> check_data <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">double</span> <span class="hl opt">**</span>check_dbl <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">double</span> <span class="hl opt">*</span> check_dbl_data <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">size_t</span> count_nbytes_read <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwb">size_t</span> count_nbytes_written <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl com">/* Temporary buffer dimensions */</span> <span class="hl ppc">#define DSET_TMP_DIM1 50</span> <span class="hl ppc">#define DSET_TMP_DIM2 100</span> <span class="hl com">/* Declarations for test_idx_compatible() */</span> <span class="hl ppc">#define DSET</span> <span class="hl pps">"dset"</span><span class="hl ppc"></span> <span class="hl ppc">#define DSET_FILTER</span> <span class="hl pps">"dset_filter"</span><span class="hl ppc"></span> <span class="hl kwb">const char</span> <span class="hl opt">*</span>OLD_FILENAME<span class="hl opt">[] = {</span> <span class="hl com">/* Files created under 1.6 branch and 1.8 branch */</span> <span class="hl str">"btree_idx_1_6.h5"</span><span class="hl opt">,</span> <span class="hl com">/* 1.6 HDF5 file */</span> <span class="hl str">"btree_idx_1_8.h5"</span> <span class="hl com">/* 1.8 HDF5 file */</span> <span class="hl opt">};</span> <span class="hl com">/* Local prototypes for filter functions */</span> <span class="hl kwb">static size_t</span> <span class="hl kwd">filter_bogus</span><span class="hl opt">(</span><span class="hl kwb">unsigned int</span> flags<span class="hl opt">,</span> <span class="hl kwb">size_t</span> cd_nelmts<span class="hl opt">,</span> <span class="hl kwb">const unsigned int</span> <span class="hl opt">*</span>cd_values<span class="hl opt">,</span> <span class="hl kwb">size_t</span> nbytes<span class="hl opt">,</span> <span class="hl kwb">size_t</span> <span class="hl opt">*</span>buf_size<span class="hl opt">,</span> <span class="hl kwb">void</span> <span class="hl opt">**</span>buf<span class="hl opt">);</span> <span class="hl kwb">static</span> htri_t <span class="hl kwd">can_apply_bogus</span><span class="hl opt">(</span>hid_t dcpl_id<span class="hl opt">,</span> hid_t type_id<span class="hl opt">,</span> hid_t space_id<span class="hl opt">);</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">set_local_bogus2</span><span class="hl opt">(</span>hid_t dcpl_id<span class="hl opt">,</span> hid_t type_id<span class="hl opt">,</span> hid_t space_id<span class="hl opt">);</span> <span class="hl kwb">static size_t</span> <span class="hl kwd">filter_bogus2</span><span class="hl opt">(</span><span class="hl kwb">unsigned int</span> flags<span class="hl opt">,</span> <span class="hl kwb">size_t</span> cd_nelmts<span class="hl opt">,</span> <span class="hl kwb">const unsigned int</span> <span class="hl opt">*</span>cd_values<span class="hl opt">,</span> <span class="hl kwb">size_t</span> nbytes<span class="hl opt">,</span> <span class="hl kwb">size_t</span> <span class="hl opt">*</span>buf_size<span class="hl opt">,</span> <span class="hl kwb">void</span> <span class="hl opt">**</span>buf<span class="hl opt">);</span> <span class="hl kwb">static size_t</span> <span class="hl kwd">filter_bogus3</span><span class="hl opt">(</span><span class="hl kwb">unsigned int</span> flags<span class="hl opt">,</span> <span class="hl kwb">size_t</span> cd_nelmts<span class="hl opt">,</span> <span class="hl kwb">const unsigned int</span> <span class="hl opt">*</span>cd_values<span class="hl opt">,</span> <span class="hl kwb">size_t</span> nbytes<span class="hl opt">,</span> <span class="hl kwb">size_t</span> <span class="hl opt">*</span>buf_size<span class="hl opt">,</span> <span class="hl kwb">void</span> <span class="hl opt">**</span>buf<span class="hl opt">);</span> <span class="hl kwb">static size_t</span> <span class="hl kwd">filter_corrupt</span><span class="hl opt">(</span><span class="hl kwb">unsigned int</span> flags<span class="hl opt">,</span> <span class="hl kwb">size_t</span> cd_nelmts<span class="hl opt">,</span> <span class="hl kwb">const unsigned int</span> <span class="hl opt">*</span>cd_values<span class="hl opt">,</span> <span class="hl kwb">size_t</span> nbytes<span class="hl opt">,</span> <span class="hl kwb">size_t</span> <span class="hl opt">*</span>buf_size<span class="hl opt">,</span> <span class="hl kwb">void</span> <span class="hl opt">**</span>buf<span class="hl opt">);</span> <span class="hl kwb">static size_t</span> <span class="hl kwd">filter_expand</span><span class="hl opt">(</span><span class="hl kwb">unsigned int</span> flags<span class="hl opt">,</span> <span class="hl kwb">size_t</span> cd_nelmts<span class="hl opt">,</span> <span class="hl kwb">const unsigned int</span> <span class="hl opt">*</span>cd_values<span class="hl opt">,</span> <span class="hl kwb">size_t</span> nbytes<span class="hl opt">,</span> <span class="hl kwb">size_t</span> <span class="hl opt">*</span>buf_size<span class="hl opt">,</span> <span class="hl kwb">void</span> <span class="hl opt">**</span>buf<span class="hl opt">);</span> <span class="hl kwb">static size_t</span> <span class="hl kwd">filter_count</span><span class="hl opt">(</span><span class="hl kwb">unsigned int</span> flags<span class="hl opt">,</span> <span class="hl kwb">size_t</span> cd_nelmts<span class="hl opt">,</span> <span class="hl kwb">const unsigned int</span> <span class="hl opt">*</span>cd_values<span class="hl opt">,</span> <span class="hl kwb">size_t</span> nbytes<span class="hl opt">,</span> <span class="hl kwb">size_t</span> <span class="hl opt">*</span>buf_size<span class="hl opt">,</span> <span class="hl kwb">void</span> <span class="hl opt">**</span>buf<span class="hl opt">);</span> <span class="hl com">/* This message derives from H5Z */</span> <span class="hl kwb">const</span> H5Z_class2_t H5Z_COUNT<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {{</span> H5Z_CLASS_T_VERS<span class="hl opt">,</span> <span class="hl com">/* H5Z_class_t version */</span> H5Z_FILTER_COUNT<span class="hl opt">,</span> <span class="hl com">/* Filter id number */</span> <span class="hl num">1</span><span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> <span class="hl com">/* Encoding and decoding enabled */</span> <span class="hl str">"count"</span><span class="hl opt">,</span> <span class="hl com">/* Filter name for debugging */</span> NULL<span class="hl opt">,</span> <span class="hl com">/* The "can apply" callback */</span> NULL<span class="hl opt">,</span> <span class="hl com">/* The "set local" callback */</span> filter_count<span class="hl opt">,</span> <span class="hl com">/* The actual filter function */</span> <span class="hl opt">}};</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: filter_count</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: This filter counts the number of bytes read and written,</span> <span class="hl com"> * incrementing count_nbytes_read or count_nbytes_written as</span> <span class="hl com"> * appropriate.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: Data chunk size</span> <span class="hl com"> * Failure: 0</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static size_t</span> <span class="hl kwd">filter_count</span><span class="hl opt">(</span><span class="hl kwb">unsigned int</span> flags<span class="hl opt">,</span> <span class="hl kwb">size_t</span> H5_ATTR_UNUSED cd_nelmts<span class="hl opt">,</span> <span class="hl kwb">const unsigned int</span> H5_ATTR_UNUSED <span class="hl opt">*</span>cd_values<span class="hl opt">,</span> <span class="hl kwb">size_t</span> nbytes<span class="hl opt">,</span> <span class="hl kwb">size_t</span> H5_ATTR_UNUSED <span class="hl opt">*</span>buf_size<span class="hl opt">,</span> <span class="hl kwb">void</span> H5_ATTR_UNUSED <span class="hl opt">**</span>buf<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>flags <span class="hl opt">&</span> H5Z_FLAG_REVERSE<span class="hl opt">)</span> count_nbytes_read <span class="hl opt">+=</span> nbytes<span class="hl opt">;</span> <span class="hl kwa">else</span> count_nbytes_written <span class="hl opt">+=</span> nbytes<span class="hl opt">;</span> <span class="hl kwa">return</span> nbytes<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end filter_count() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_create</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Attempts to create a dataset.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_create</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t dataset<span class="hl opt">,</span> space<span class="hl opt">,</span> small_space<span class="hl opt">,</span> create_parms<span class="hl opt">;</span> hsize_t dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">],</span> small_dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> herr_t status<span class="hl opt">;</span> hsize_t csize<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"create, open, close"</span><span class="hl opt">);</span> <span class="hl com">/* Create the data space */</span> dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">256</span><span class="hl opt">;</span> dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">512</span><span class="hl opt">;</span> space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> NULL<span class="hl opt">);</span> <span class="hl kwd">HDassert</span><span class="hl opt">(</span>space <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl com">/* Create a small data space for compact dataset */</span> small_dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">16</span><span class="hl opt">;</span> small_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">8</span><span class="hl opt">;</span> small_space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> small_dims<span class="hl opt">,</span> NULL<span class="hl opt">);</span> <span class="hl kwd">HDassert</span><span class="hl opt">(</span>space <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl com">/*</span> <span class="hl com"> * Create a dataset using the default dataset creation properties. We're</span> <span class="hl com"> * not sure what they are, so we won't check.</span> <span class="hl com"> */</span> dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_DEFAULT_NAME<span class="hl opt">,</span> H5T_NATIVE_DOUBLE<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dataset <span class="hl opt"><</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Close the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Add a comment to the dataset */</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Oset_comment_by_name</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_DEFAULT_NAME<span class="hl opt">,</span> <span class="hl str">"This is a dataset"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt"><</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/*</span> <span class="hl com"> * Try creating a dataset that already exists. This should fail since a</span> <span class="hl com"> * dataset can only be created once. Temporarily turn off error</span> <span class="hl com"> * reporting.</span> <span class="hl com"> */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_DEFAULT_NAME<span class="hl opt">,</span> H5T_NATIVE_DOUBLE<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dataset <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" Library allowed overwrite of existing dataset."</span><span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/*</span> <span class="hl com"> * Open the dataset we created above and then close it. This is how</span> <span class="hl com"> * existing datasets are accessed.</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fflush</span><span class="hl opt">(</span>file<span class="hl opt">,</span> H5F_SCOPE_GLOBAL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_DEFAULT_NAME<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/*</span> <span class="hl com"> * Try opening a non-existent dataset. This should fail since new datasets</span> <span class="hl com"> * cannot be created with this function. Temporarily turn off error</span> <span class="hl com"> * reporting.</span> <span class="hl com"> */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> <span class="hl str">"does_not_exist"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dataset <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" Opened a non-existent dataset."</span><span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/*</span> <span class="hl com"> * Create a new dataset that uses chunked storage instead of the default</span> <span class="hl com"> * layout.</span> <span class="hl com"> */</span> create_parms <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">);</span> <span class="hl kwd">HDassert</span><span class="hl opt">(</span>create_parms <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl com">/* Attempt to create a dataset with invalid chunk sizes */</span> csize<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] *</span> <span class="hl num">2</span><span class="hl opt">;</span> csize<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] *</span> <span class="hl num">2</span><span class="hl opt">;</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>create_parms<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> csize<span class="hl opt">);</span> <span class="hl kwd">HDassert</span><span class="hl opt">(</span>status <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">);</span> H5E_BEGIN_TRY <span class="hl opt">{</span> dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_CHUNKED_NAME<span class="hl opt">,</span> H5T_NATIVE_DOUBLE<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> create_parms<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dataset <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" Opened a dataset with incorrect chunking parameters."</span><span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> csize<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">5</span><span class="hl opt">;</span> csize<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">100</span><span class="hl opt">;</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>create_parms<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> csize<span class="hl opt">);</span> <span class="hl kwd">HDassert</span><span class="hl opt">(</span>status <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">);</span> dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_CHUNKED_NAME<span class="hl opt">,</span> H5T_NATIVE_DOUBLE<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> create_parms<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dataset <span class="hl opt"><</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>create_parms<span class="hl opt">);</span> <span class="hl com">/* Test dataset address. Should be undefined. */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dget_offset</span><span class="hl opt">(</span>dataset<span class="hl opt">) !=</span> HADDR_UNDEF<span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/*</span> <span class="hl com"> * Close the chunked dataset.</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/*</span> <span class="hl com"> * Create a compact dataset, then close it.</span> <span class="hl com"> */</span> create_parms <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">);</span> <span class="hl kwd">HDassert</span><span class="hl opt">(</span>create_parms <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">);</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Pset_layout</span><span class="hl opt">(</span>create_parms<span class="hl opt">,</span> H5D_COMPACT<span class="hl opt">);</span> <span class="hl kwd">HDassert</span><span class="hl opt">(</span>status <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">);</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Pset_alloc_time</span><span class="hl opt">(</span>create_parms<span class="hl opt">,</span> H5D_ALLOC_TIME_EARLY<span class="hl opt">);</span> <span class="hl kwd">HDassert</span><span class="hl opt">(</span>status <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">);</span> dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_COMPACT_NAME<span class="hl opt">,</span> H5T_NATIVE_DOUBLE<span class="hl opt">,</span> small_space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> create_parms<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dataset <span class="hl opt"><</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>create_parms<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_create() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_simple_io</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests simple I/O. That is, reading and writing a complete</span> <span class="hl com"> * multi-dimensional array without data type or data space</span> <span class="hl com"> * conversions, without compression, and stored contiguously.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_simple_io</span><span class="hl opt">(</span><span class="hl kwb">const char</span> <span class="hl opt">*</span>env_h5_drvr<span class="hl opt">,</span> hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> hid_t file <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> dataset <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> space <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> xfer <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwb">int</span> i<span class="hl opt">,</span> j<span class="hl opt">,</span> n<span class="hl opt">;</span> hsize_t dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl kwb">void</span> <span class="hl opt">*</span> tconv_buf <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">int</span> f <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> haddr_t offset<span class="hl opt">;</span> <span class="hl kwb">int</span> <span class="hl opt">**</span> rdata <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">int</span> <span class="hl opt">*</span> rdata_bytes <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"simple I/O"</span><span class="hl opt">);</span> <span class="hl com">/* Can't run this test with multi-file VFDs because of HDopen/read/seek the file directly */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">HDstrcmp</span><span class="hl opt">(</span>env_h5_drvr<span class="hl opt">,</span> <span class="hl str">"split"</span><span class="hl opt">) !=</span> <span class="hl num">0</span> <span class="hl opt">&&</span> <span class="hl kwd">HDstrcmp</span><span class="hl opt">(</span>env_h5_drvr<span class="hl opt">,</span> <span class="hl str">"multi"</span><span class="hl opt">) !=</span> <span class="hl num">0</span> <span class="hl opt">&&</span> <span class="hl kwd">HDstrcmp</span><span class="hl opt">(</span>env_h5_drvr<span class="hl opt">,</span> <span class="hl str">"family"</span><span class="hl opt">) !=</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">4</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> filename<span class="hl opt">);</span> <span class="hl com">/* Set up data array */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>rdata_bytes <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">*)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>DSET_DIM1 <span class="hl opt">*</span> DSET_DIM2<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>rdata <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">**)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>DSET_DIM1<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>rdata_bytes<span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> DSET_DIM1<span class="hl opt">;</span> i<span class="hl opt">++)</span> rdata<span class="hl opt">[</span>i<span class="hl opt">] =</span> rdata_bytes <span class="hl opt">+ (</span>i <span class="hl opt">*</span> DSET_DIM2<span class="hl opt">);</span> <span class="hl com">/* Initialize the dataset */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> n <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> DSET_DIM1<span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> DSET_DIM2<span class="hl opt">;</span> j<span class="hl opt">++)</span> points<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] =</span> n<span class="hl opt">++;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>file <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the data space */</span> dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> DSET_DIM1<span class="hl opt">;</span> dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> DSET_DIM2<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create a small conversion buffer to test strip mining */</span> tconv_buf <span class="hl opt">=</span> <span class="hl kwd">HDmalloc</span><span class="hl opt">((</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">1000</span><span class="hl opt">);</span> xfer <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_XFER<span class="hl opt">);</span> <span class="hl kwd">HDassert</span><span class="hl opt">(</span>xfer <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_buffer</span><span class="hl opt">(</span>xfer<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">1000</span><span class="hl opt">,</span> tconv_buf<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_SIMPLE_IO_NAME<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> space <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Test dataset address. Should be undefined. */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dget_offset</span><span class="hl opt">(</span>dataset<span class="hl opt">) !=</span> HADDR_UNDEF<span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Write the data to the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> xfer<span class="hl opt">,</span> points_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Test dataset address in file. Open the same file as a C file, seek</span> <span class="hl com"> * the data position as H5Dget_offset points to, read the dataset, and</span> <span class="hl com"> * compare it with the data written in.*/</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>offset <span class="hl opt">=</span> <span class="hl kwd">H5Dget_offset</span><span class="hl opt">(</span>dataset<span class="hl opt">)) ==</span> HADDR_UNDEF<span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Read the dataset back */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> xfer<span class="hl opt">,</span> check_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Check that the values read are the same as the values written */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> DSET_DIM1<span class="hl opt">;</span> i<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> DSET_DIM2<span class="hl opt">;</span> j<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>points<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] !=</span> check<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %d,%d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> i<span class="hl opt">,</span> j<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>xfer<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> xfer <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> dataset <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> file <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> f <span class="hl opt">=</span> <span class="hl kwd">HDopen</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> O_RDONLY<span class="hl opt">);</span> <span class="hl kwd">HDlseek</span><span class="hl opt">(</span>f<span class="hl opt">, (</span>off_t<span class="hl opt">)</span>offset<span class="hl opt">,</span> SEEK_SET<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">HDread</span><span class="hl opt">(</span>f<span class="hl opt">,</span> rdata_bytes<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> DSET_DIM1 <span class="hl opt">*</span> DSET_DIM2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Check that the values read are the same as the values written */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> DSET_DIM1<span class="hl opt">;</span> i<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> DSET_DIM2<span class="hl opt">;</span> j<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>points<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] !=</span> rdata<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %d,%d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> i<span class="hl opt">,</span> j<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl kwd">HDclose</span><span class="hl opt">(</span>f<span class="hl opt">);</span> f <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>tconv_buf<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rdata_bytes<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rdata<span class="hl opt">);</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwd">SKIPPED</span><span class="hl opt">();</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" Current VFD doesn't support continuous address space"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>space <span class="hl opt">></span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>xfer <span class="hl opt">></span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>xfer<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dataset <span class="hl opt">></span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>file <span class="hl opt">></span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>f <span class="hl opt">></span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">HDclose</span><span class="hl opt">(</span>f<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>tconv_buf<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rdata_bytes<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rdata<span class="hl opt">);</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_simple_io() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_userblock_offset</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests H5Dget_offset when user block exists.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_userblock_offset</span><span class="hl opt">(</span><span class="hl kwb">const char</span> <span class="hl opt">*</span>env_h5_drvr<span class="hl opt">,</span> hid_t fapl<span class="hl opt">,</span> hbool_t new_format<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> hid_t file <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> fcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> dataset <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> space <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwb">int</span> i<span class="hl opt">,</span> j<span class="hl opt">;</span> hsize_t dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl kwb">int</span> f <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> haddr_t offset<span class="hl opt">;</span> <span class="hl kwb">int</span> <span class="hl opt">**</span> rdata <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">int</span> <span class="hl opt">*</span> rdata_bytes <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"dataset offset with user block"</span><span class="hl opt">);</span> <span class="hl com">/* Can't run this test with multi-file VFDs because of HDopen/read/seek the file directly */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">HDstrcmp</span><span class="hl opt">(</span>env_h5_drvr<span class="hl opt">,</span> <span class="hl str">"split"</span><span class="hl opt">) !=</span> <span class="hl num">0</span> <span class="hl opt">&&</span> <span class="hl kwd">HDstrcmp</span><span class="hl opt">(</span>env_h5_drvr<span class="hl opt">,</span> <span class="hl str">"multi"</span><span class="hl opt">) !=</span> <span class="hl num">0</span> <span class="hl opt">&&</span> <span class="hl kwd">HDstrcmp</span><span class="hl opt">(</span>env_h5_drvr<span class="hl opt">,</span> <span class="hl str">"family"</span><span class="hl opt">) !=</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> filename<span class="hl opt">);</span> <span class="hl com">/* Set up data array */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>rdata_bytes <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">*)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>DSET_DIM1 <span class="hl opt">*</span> DSET_DIM2<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>rdata <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">**)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>DSET_DIM1<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>rdata_bytes<span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> DSET_DIM1<span class="hl opt">;</span> i<span class="hl opt">++)</span> rdata<span class="hl opt">[</span>i<span class="hl opt">] =</span> rdata_bytes <span class="hl opt">+ (</span>i <span class="hl opt">*</span> DSET_DIM2<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_FILE_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_userblock</span><span class="hl opt">(</span>fcpl<span class="hl opt">, (</span>hsize_t<span class="hl opt">)</span>USER_BLOCK<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>new_format<span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_file_space_page_size</span><span class="hl opt">(</span>fcpl<span class="hl opt">, (</span>hsize_t<span class="hl opt">)</span>USER_BLOCK<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>file <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> fcpl<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>fcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> fcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Create the data space */</span> dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> DSET_DIM1<span class="hl opt">;</span> dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> DSET_DIM2<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_USERBLOCK_IO_NAME<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> space <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Write the data to the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> points_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Test dataset address in file. Open the same file as a C file, seek</span> <span class="hl com"> * the data position as H5Dget_offset points to, read the dataset, and</span> <span class="hl com"> * compare it with the data written in.*/</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>offset <span class="hl opt">=</span> <span class="hl kwd">H5Dget_offset</span><span class="hl opt">(</span>dataset<span class="hl opt">)) ==</span> HADDR_UNDEF<span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> dataset <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> file <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> f <span class="hl opt">=</span> <span class="hl kwd">HDopen</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> O_RDONLY<span class="hl opt">);</span> <span class="hl kwd">HDlseek</span><span class="hl opt">(</span>f<span class="hl opt">, (</span>off_t<span class="hl opt">)</span>offset<span class="hl opt">,</span> SEEK_SET<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">HDread</span><span class="hl opt">(</span>f<span class="hl opt">,</span> rdata_bytes<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> DSET_DIM1 <span class="hl opt">*</span> DSET_DIM2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Check that the values read are the same as the values written */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> DSET_DIM1<span class="hl opt">;</span> i<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> DSET_DIM2<span class="hl opt">;</span> j<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>points<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] !=</span> rdata<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %d,%d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> i<span class="hl opt">,</span> j<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl kwd">HDclose</span><span class="hl opt">(</span>f<span class="hl opt">);</span> f <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rdata_bytes<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rdata<span class="hl opt">);</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwd">SKIPPED</span><span class="hl opt">();</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" Current VFD doesn't support continuous address space"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>space <span class="hl opt">></span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>fcpl <span class="hl opt">></span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>fcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dataset <span class="hl opt">></span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>file <span class="hl opt">></span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>f <span class="hl opt">></span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">HDclose</span><span class="hl opt">(</span>f<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rdata_bytes<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rdata<span class="hl opt">);</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_userblock_offset() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_compact_io</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests compact dataset I/O. That is, reading and writing a</span> <span class="hl com"> * complete multi-dimensional array without data type or data</span> <span class="hl com"> * space conversions, without compression, and store in</span> <span class="hl com"> * compact dataset.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_compact_io</span><span class="hl opt">(</span>hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t file <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> hid_t dataset <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> hid_t space <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> hid_t plist <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> hid_t verfile <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> new_fapl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hsize_t dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl kwb">int</span> wbuf<span class="hl opt">[</span><span class="hl num">16</span><span class="hl opt">][</span><span class="hl num">8</span><span class="hl opt">],</span> rbuf<span class="hl opt">[</span><span class="hl num">16</span><span class="hl opt">][</span><span class="hl num">8</span><span class="hl opt">];</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> H5F_libver_t low<span class="hl opt">,</span> high<span class="hl opt">;</span> <span class="hl com">/* File format bounds */</span> H5F_t <span class="hl opt">*</span> fp<span class="hl opt">;</span> <span class="hl com">/* Internal file pointer */</span> H5D_t <span class="hl opt">*</span> dsetp<span class="hl opt">;</span> <span class="hl com">/* Internal dataset pointer */</span> <span class="hl kwb">int</span> i<span class="hl opt">,</span> j<span class="hl opt">,</span> n<span class="hl opt">;</span> <span class="hl com">/* Indices */</span> herr_t ret<span class="hl opt">;</span> <span class="hl com">/* Generic return value */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"compact dataset I/O"</span><span class="hl opt">);</span> <span class="hl com">/* Initialize data */</span> n <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl num">16</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> <span class="hl num">8</span><span class="hl opt">;</span> j<span class="hl opt">++)</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] =</span> n<span class="hl opt">++;</span> <span class="hl com">/* Create a small data space for compact dataset */</span> dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">16</span><span class="hl opt">;</span> dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">8</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create a file */</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> filename<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>file <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create property list for compact dataset creation */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>plist <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_layout</span><span class="hl opt">(</span>plist<span class="hl opt">,</span> H5D_COMPACT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_alloc_time</span><span class="hl opt">(</span>plist<span class="hl opt">,</span> H5D_ALLOC_TIME_EARLY<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create and write to a compact dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_COMPACT_IO_NAME<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> plist<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Test dataset address. Should be undefined. */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dget_offset</span><span class="hl opt">(</span>dataset<span class="hl opt">) !=</span> HADDR_UNDEF<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> wbuf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Test dataset address. Should be undefined. */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dget_offset</span><span class="hl opt">(</span>dataset<span class="hl opt">) !=</span> HADDR_UNDEF<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close file */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/*</span> <span class="hl com"> * Open the file and check data</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>file <span class="hl opt">=</span> <span class="hl kwd">H5Fopen</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_RDONLY<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_COMPACT_IO_NAME<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> rbuf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Check that the values read are the same as the values written */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl num">16</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> <span class="hl num">8</span><span class="hl opt">;</span> j<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>rbuf<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] !=</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %d,%d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> i<span class="hl opt">,</span> j<span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" wbuf[%d][%d]=%d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> i<span class="hl opt">,</span> j<span class="hl opt">,</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" rbuf[%d][%d]=%d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> i<span class="hl opt">,</span> j<span class="hl opt">,</span> rbuf<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/**************************************</span> <span class="hl com"> * Additional test for version bounds *</span> <span class="hl com"> **************************************/</span> <span class="hl com">/* Create a copy of file access property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>new_fapl <span class="hl opt">=</span> <span class="hl kwd">h5_fileaccess</span><span class="hl opt">()) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Loop through all the combinations of low/high library format bounds,</span> <span class="hl com"> skipping invalid combinations.</span> <span class="hl com"> - Create a file, create and write a compact dataset, and verify its data</span> <span class="hl com"> - Verify the dataset's layout and fill message versions */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>low <span class="hl opt">=</span> H5F_LIBVER_EARLIEST<span class="hl opt">;</span> low <span class="hl opt"><</span> H5F_LIBVER_NBOUNDS<span class="hl opt">;</span> low<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>high <span class="hl opt">=</span> H5F_LIBVER_EARLIEST<span class="hl opt">;</span> high <span class="hl opt"><</span> H5F_LIBVER_NBOUNDS<span class="hl opt">;</span> high<span class="hl opt">++) {</span> <span class="hl com">/* Set version bounds */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Pset_libver_bounds</span><span class="hl opt">(</span>new_fapl<span class="hl opt">,</span> low<span class="hl opt">,</span> high<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt"><</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl com">/* Invalid low/high combinations */</span> <span class="hl kwa">continue</span><span class="hl opt">;</span> <span class="hl com">/* Create a file */</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">25</span><span class="hl opt">],</span> new_fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> filename<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>verfile <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> new_fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create the compact dataset */</span> dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>verfile<span class="hl opt">,</span> DSET_DEFAULT_NAME<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> plist<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dataset <span class="hl opt"><</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Write the same data as of DSET_COMPACT_IO_NAME */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> wbuf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close DSET_DEFAULT_NAME, then reopen it to read and verify</span> <span class="hl com"> the data */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>verfile<span class="hl opt">,</span> DSET_DEFAULT_NAME<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> rbuf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Check that the values read are the same as the values written */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl num">16</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> <span class="hl num">8</span><span class="hl opt">;</span> j<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>rbuf<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] !=</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %d,%d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> i<span class="hl opt">,</span> j<span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" wbuf[%d][%d]=%d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> i<span class="hl opt">,</span> j<span class="hl opt">,</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" rbuf[%d][%d]=%d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> i<span class="hl opt">,</span> j<span class="hl opt">,</span> rbuf<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end */</span> <span class="hl com">/* Get the internal file pointer */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fp <span class="hl opt">= (</span>H5F_t <span class="hl opt">*)</span><span class="hl kwd">H5VL_object</span><span class="hl opt">(</span>verfile<span class="hl opt">)) ==</span> NULL<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the internal dataset pointer */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsetp <span class="hl opt">= (</span>H5D_t <span class="hl opt">*)</span><span class="hl kwd">H5VL_object</span><span class="hl opt">(</span>dataset<span class="hl opt">)) ==</span> NULL<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify the dataset's layout and fill message versions */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>fp<span class="hl opt">-></span>shared<span class="hl opt">-></span>low_bound <span class="hl opt">==</span> H5F_LIBVER_EARLIEST<span class="hl opt">) {</span> <span class="hl kwd">VERIFY</span><span class="hl opt">(</span>dsetp<span class="hl opt">-></span>shared<span class="hl opt">-></span>layout<span class="hl opt">.</span>version<span class="hl opt">,</span> H5O_LAYOUT_VERSION_DEFAULT<span class="hl opt">,</span> <span class="hl str">"layout_ver_bounds"</span><span class="hl opt">);</span> <span class="hl kwd">VERIFY</span><span class="hl opt">(</span>dsetp<span class="hl opt">-></span>shared<span class="hl opt">-></span>dcpl_cache<span class="hl opt">.</span>fill<span class="hl opt">.</span>version<span class="hl opt">,</span> H5O_FILL_VERSION_2<span class="hl opt">,</span> <span class="hl str">"fill_ver_bounds"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwd">VERIFY</span><span class="hl opt">(</span>dsetp<span class="hl opt">-></span>shared<span class="hl opt">-></span>layout<span class="hl opt">.</span>version<span class="hl opt">,</span> H5O_layout_ver_bounds<span class="hl opt">[</span>fp<span class="hl opt">-></span>shared<span class="hl opt">-></span>low_bound<span class="hl opt">],</span> <span class="hl str">"layout_ver_bounds"</span><span class="hl opt">);</span> <span class="hl kwd">VERIFY</span><span class="hl opt">(</span>dsetp<span class="hl opt">-></span>shared<span class="hl opt">-></span>dcpl_cache<span class="hl opt">.</span>fill<span class="hl opt">.</span>version<span class="hl opt">,</span> H5O_fill_ver_bounds<span class="hl opt">[</span>fp<span class="hl opt">-></span>shared<span class="hl opt">-></span>low_bound<span class="hl opt">],</span> <span class="hl str">"fill_ver_bounds"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* Close the dataset and delete from the file */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Ldelete</span><span class="hl opt">(</span>verfile<span class="hl opt">,</span> DSET_DEFAULT_NAME<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close the file */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>verfile<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end for high */</span> <span class="hl opt">}</span> <span class="hl com">/* end for low */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>new_fapl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>plist<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>plist<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>new_fapl<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>verfile<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_compact_io() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_max_compact</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests compact dataset of maximal size.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_max_compact</span><span class="hl opt">(</span>hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t file <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hid_t dataset <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hid_t space <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hid_t plist <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hsize_t dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> <span class="hl kwb">size_t</span> compact_size<span class="hl opt">;</span> <span class="hl kwb">int</span> <span class="hl opt">*</span> wbuf <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">int</span> <span class="hl opt">*</span> rbuf <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> <span class="hl kwb">int</span> n<span class="hl opt">;</span> <span class="hl kwb">size_t</span> u<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"compact dataset of maximal size"</span><span class="hl opt">);</span> <span class="hl com">/* Test compact dataset of size 64KB-64 */</span> <span class="hl com">/* Initialize data */</span> compact_size <span class="hl opt">= (</span>SIXTY_FOUR_KB <span class="hl opt">-</span> <span class="hl num">64</span><span class="hl opt">) /</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>wbuf <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">*)</span><span class="hl kwd">HDmalloc</span><span class="hl opt">(</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> compact_size<span class="hl opt">)))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>rbuf <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">*)</span><span class="hl kwd">HDmalloc</span><span class="hl opt">(</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> compact_size<span class="hl opt">)))</span> TEST_ERROR<span class="hl opt">;</span> n <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>u <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> u <span class="hl opt"><</span> compact_size<span class="hl opt">;</span> u<span class="hl opt">++)</span> wbuf<span class="hl opt">[</span>u<span class="hl opt">] =</span> n<span class="hl opt">++;</span> <span class="hl com">/* Create a small data space for compact dataset */</span> dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] = (</span>hsize_t<span class="hl opt">)</span>compact_size<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create a file */</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> filename<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>file <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create property list for compact dataset creation */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>plist <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_layout</span><span class="hl opt">(</span>plist<span class="hl opt">,</span> H5D_COMPACT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create and write to a compact dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_COMPACT_MAX_NAME<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> plist<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> wbuf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close file */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>plist<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/*</span> <span class="hl com"> * Open the file and check data</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>file <span class="hl opt">=</span> <span class="hl kwd">H5Fopen</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_RDONLY<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_COMPACT_MAX_NAME<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> rbuf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Check that the values read are the same as the values written */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>u <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> u <span class="hl opt"><</span> compact_size<span class="hl opt">;</span> u<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>rbuf<span class="hl opt">[</span>u<span class="hl opt">] !=</span> wbuf<span class="hl opt">[</span>u<span class="hl opt">]) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %u</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>u<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>wbuf<span class="hl opt">);</span> wbuf <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rbuf<span class="hl opt">);</span> rbuf <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl com">/* Test compact dataset of size 64KB */</span> <span class="hl com">/* Create a data space for compact dataset */</span> compact_size <span class="hl opt">=</span> SIXTY_FOUR_KB <span class="hl opt">/</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">);</span> dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] = (</span>hsize_t<span class="hl opt">)</span>compact_size<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>file <span class="hl opt">=</span> <span class="hl kwd">H5Fopen</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_RDWR<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create property list for compact dataset creation */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>plist <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_layout</span><span class="hl opt">(</span>plist<span class="hl opt">,</span> H5D_COMPACT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create and write to a compact dataset */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_COMPACT_MAX2_NAME<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> plist<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl com">/* Close file */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>plist<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>wbuf<span class="hl opt">)</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>wbuf<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>rbuf<span class="hl opt">)</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rbuf<span class="hl opt">);</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl com">/* Close file */</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>plist<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_max_compact() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_layout_extend</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Verify that the creation of extendible dataset with dataspace:</span> <span class="hl com"> * cur_dims < max_dims (max_dims can be fixed size or H5S_UNLIMITED)</span> <span class="hl com"> * will behave as follows:</span> <span class="hl com"> * H5D_COMPACT layout: fail</span> <span class="hl com"> * H5D_CONTIGUOUS layout: fail</span> <span class="hl com"> * H5D_CHUNKED layout: succeed</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_layout_extend</span><span class="hl opt">(</span>hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> <span class="hl com">/* File name */</span> hid_t fid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* File id */</span> hid_t sid_fix <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> sid_unlim <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataspace id */</span> hid_t dcpl_compact <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> dcpl_contig <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> dcpl_chunked <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset creation property list id */</span> hid_t did_fixed <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> did_unlim <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset id */</span> hsize_t cur_size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span><span class="hl num">10</span><span class="hl opt">};</span> <span class="hl com">/* Current size of dataspace */</span> hsize_t max_unlim<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span>H5S_UNLIMITED<span class="hl opt">};</span> <span class="hl com">/* Maximum size of dataspace (unlimited) */</span> hsize_t max_fix<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span><span class="hl num">100</span><span class="hl opt">};</span> <span class="hl com">/* Maximum size of dataspace (fixed) */</span> hsize_t chunk_dim<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span><span class="hl num">10</span><span class="hl opt">};</span> <span class="hl com">/* Chunk size */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"extendible dataset with various layout"</span><span class="hl opt">);</span> <span class="hl com">/* Create a file */</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">15</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> filename<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid_fix <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> cur_size<span class="hl opt">,</span> max_fix<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid_unlim <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> cur_size<span class="hl opt">,</span> max_unlim<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create property list for compact dataset creation */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl_compact <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_layout</span><span class="hl opt">(</span>dcpl_compact<span class="hl opt">,</span> H5D_COMPACT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataset with extendible dataspace (fixed max_dims) should fail */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"compact"</span><span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid_fix<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl_compact<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">) !=</span> FAIL<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl com">/* Create dataset with extendible dataspace (unlimited max_dims) should fail */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"compact"</span><span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid_unlim<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl_compact<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">) !=</span> FAIL<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl com">/* Create property list for contiguous dataset creation */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl_contig <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span><span class="hl kwd">H5Pset_layout</span><span class="hl opt">(</span>dcpl_contig<span class="hl opt">,</span> H5D_CONTIGUOUS<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataset with extendible dataspace (fixed max_dims) should fail */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"contig"</span><span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid_fix<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl_contig<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">) !=</span> FAIL<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl com">/* Create dataset with extendible dataspace (unlimited max_dims) should fail*/</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"contig"</span><span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid_unlim<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl_contig<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">) !=</span> FAIL<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl com">/* Create property list for chunked dataset creation */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl_chunked <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_layout</span><span class="hl opt">(</span>dcpl_chunked<span class="hl opt">,</span> H5D_CHUNKED<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl_chunked<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> chunk_dim<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataset with extendible dataspace (fixed max_dims) should succeed */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>did_fixed <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"chunked_fixed"</span><span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid_fix<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl_chunked<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataset with extendible dataspace (unlimited max_dims) should succeed */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>did_unlim <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"chunked_unlim"</span><span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid_unlim<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl_chunked<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Closing */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid_fix<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid_unlim<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl_compact<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl_contig<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl_chunked<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did_fixed<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did_unlim<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid_fix<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid_unlim<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl_compact<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl_contig<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl_chunked<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did_fixed<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did_unlim<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_layout_extend() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_conv_buffer</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Test size of data type conversion buffer.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_conv_buffer</span><span class="hl opt">(</span>hid_t fid<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwc">typedef</span> <span class="hl kwb">struct</span> <span class="hl opt">{</span> <span class="hl kwb">int</span> a<span class="hl opt">[</span>DIM1<span class="hl opt">][</span>DIM2<span class="hl opt">][</span>DIM3<span class="hl opt">];</span> <span class="hl kwb">float</span> b<span class="hl opt">[</span>DIM2<span class="hl opt">];</span> <span class="hl kwb">double</span> c<span class="hl opt">[</span>DIM3<span class="hl opt">];</span> <span class="hl opt">}</span> CmpField<span class="hl opt">;</span> <span class="hl kwc">typedef</span> <span class="hl kwb">struct</span> <span class="hl opt">{</span> <span class="hl kwb">float</span> b<span class="hl opt">[</span>DIM2<span class="hl opt">];</span> <span class="hl kwb">double</span> c<span class="hl opt">[</span>DIM3<span class="hl opt">];</span> <span class="hl opt">}</span> CmpFieldR<span class="hl opt">;</span> herr_t status <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwb">int</span> j<span class="hl opt">,</span> k<span class="hl opt">,</span> l<span class="hl opt">;</span> CmpField <span class="hl opt">*</span> cf <span class="hl opt">=</span> NULL<span class="hl opt">;</span> CmpFieldR <span class="hl opt">*</span>cfrR <span class="hl opt">=</span> NULL<span class="hl opt">;</span> hid_t dataset <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> <span class="hl com">/* dataset ID */</span> hid_t space <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> <span class="hl com">/* data space ID */</span> hid_t ctype1 <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">,</span> ctype2 <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> <span class="hl com">/* data type ID */</span> hid_t arr_type1 <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">,</span> arr_type2 <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">,</span> arr_type3 <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">,</span> arr_type4 <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">,</span> arr_type5 <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> hsize_t dimsa<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">];</span> hsize_t dimsb<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> hsize_t dimsc<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> hid_t xfer_list <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> <span class="hl kwb">size_t</span> size<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"data type conversion buffer size"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>cf <span class="hl opt">= (</span>CmpField <span class="hl opt">*)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">((</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">1</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>CmpField<span class="hl opt">))) ==</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Populate the data members */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> DIM1<span class="hl opt">;</span> j<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>k <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> k <span class="hl opt"><</span> DIM2<span class="hl opt">;</span> k<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>l <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> l <span class="hl opt"><</span> DIM3<span class="hl opt">;</span> l<span class="hl opt">++)</span> cf<span class="hl opt">-></span>a<span class="hl opt">[</span>j<span class="hl opt">][</span>k<span class="hl opt">][</span>l<span class="hl opt">] =</span> <span class="hl num">10</span> <span class="hl opt">* (</span>j <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">) +</span> l <span class="hl opt">+</span> k<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> DIM2<span class="hl opt">;</span> j<span class="hl opt">++)</span> cf<span class="hl opt">-></span>b<span class="hl opt">[</span>j<span class="hl opt">] =</span> <span class="hl num">100.0</span>F <span class="hl opt">* (</span><span class="hl kwb">float</span><span class="hl opt">)(</span>j <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">) +</span> <span class="hl num">0.01</span>F <span class="hl opt">* (</span><span class="hl kwb">float</span><span class="hl opt">)</span>j<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> DIM3<span class="hl opt">;</span> j<span class="hl opt">++)</span> cf<span class="hl opt">-></span>c<span class="hl opt">[</span>j<span class="hl opt">] =</span> <span class="hl num">100.0</span> <span class="hl opt">* (</span><span class="hl kwb">double</span><span class="hl opt">)(</span>j <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">) +</span> <span class="hl num">0.02</span> <span class="hl opt">* (</span><span class="hl kwb">double</span><span class="hl opt">)</span>j<span class="hl opt">;</span> <span class="hl com">/* Create data space */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Screate</span><span class="hl opt">(</span>H5S_SCALAR<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Add members to the compound data type */</span> dimsa<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> DIM1<span class="hl opt">;</span> dimsa<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> DIM2<span class="hl opt">;</span> dimsa<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> DIM3<span class="hl opt">;</span> dimsb<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> DIM2<span class="hl opt">;</span> dimsc<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> DIM3<span class="hl opt">;</span> <span class="hl com">/* Create the memory data type */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>ctype1 <span class="hl opt">=</span> <span class="hl kwd">H5Tcreate</span><span class="hl opt">(</span>H5T_COMPOUND<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>CmpField<span class="hl opt">))) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>arr_type1 <span class="hl opt">=</span> <span class="hl kwd">H5Tarray_create2</span><span class="hl opt">(</span>H5T_NATIVE_INT<span class="hl opt">,</span> <span class="hl num">3</span><span class="hl opt">,</span> dimsa<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>arr_type2 <span class="hl opt">=</span> <span class="hl kwd">H5Tarray_create2</span><span class="hl opt">(</span>H5T_NATIVE_FLOAT<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> dimsb<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>arr_type3 <span class="hl opt">=</span> <span class="hl kwd">H5Tarray_create2</span><span class="hl opt">(</span>H5T_NATIVE_DOUBLE<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> dimsc<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>ctype1<span class="hl opt">,</span> <span class="hl str">"A"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>CmpField<span class="hl opt">,</span> a<span class="hl opt">),</span> arr_type1<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>ctype1<span class="hl opt">,</span> <span class="hl str">"B"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>CmpField<span class="hl opt">,</span> b<span class="hl opt">),</span> arr_type2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>ctype1<span class="hl opt">,</span> <span class="hl str">"C"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>CmpField<span class="hl opt">,</span> c<span class="hl opt">),</span> arr_type3<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_CONV_BUF_NAME<span class="hl opt">,</span> ctype1<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> ctype1<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> cf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>ctype2 <span class="hl opt">=</span> <span class="hl kwd">H5Tcreate</span><span class="hl opt">(</span>H5T_COMPOUND<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>CmpFieldR<span class="hl opt">))) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>arr_type4 <span class="hl opt">=</span> <span class="hl kwd">H5Tarray_create2</span><span class="hl opt">(</span>H5T_NATIVE_FLOAT<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> dimsb<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>arr_type5 <span class="hl opt">=</span> <span class="hl kwd">H5Tarray_create2</span><span class="hl opt">(</span>H5T_NATIVE_DOUBLE<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> dimsc<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>ctype2<span class="hl opt">,</span> <span class="hl str">"B"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>CmpFieldR<span class="hl opt">,</span> b<span class="hl opt">),</span> arr_type4<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>ctype2<span class="hl opt">,</span> <span class="hl str">"C"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>CmpFieldR<span class="hl opt">,</span> c<span class="hl opt">),</span> arr_type5<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Read should succeed since library will set conversion buffer big enough */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>cfrR <span class="hl opt">= (</span>CmpFieldR <span class="hl opt">*)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">((</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">1</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>CmpFieldR<span class="hl opt">))) ==</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> ctype2<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> cfrR<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Read should fail since conversion buffer isn't big enough */</span> xfer_list <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_XFER<span class="hl opt">);</span> size <span class="hl opt">= (</span>DIM2 <span class="hl opt">*</span> DIM3 <span class="hl opt">* (</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">)) +</span> DIM2 <span class="hl opt">* (</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">float</span><span class="hl opt">)) +</span> DIM3 <span class="hl opt">* (</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">double</span><span class="hl opt">)));</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_buffer</span><span class="hl opt">(</span>xfer_list<span class="hl opt">,</span> size<span class="hl opt">,</span> NULL<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> ctype2<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> xfer_list<span class="hl opt">,</span> cfrR<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" Library shouldn't allow conversion buffer too small"</span><span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* Read will succeed since conversion buffer is big enough */</span> size <span class="hl opt">= (</span>DIM1 <span class="hl opt">*</span> DIM2 <span class="hl opt">*</span> DIM3 <span class="hl opt">* (</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">)) +</span> DIM2 <span class="hl opt">* (</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">float</span><span class="hl opt">)) +</span> DIM3 <span class="hl opt">* (</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">double</span><span class="hl opt">)));</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_buffer</span><span class="hl opt">(</span>xfer_list<span class="hl opt">,</span> size<span class="hl opt">,</span> NULL<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> ctype2<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> xfer_list<span class="hl opt">,</span> cfrR<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>xfer_list<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>arr_type1<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>arr_type2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>arr_type3<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>ctype1<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>ctype2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>arr_type4<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>arr_type5<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>cf<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>cfrR<span class="hl opt">);</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" PASSED"</span><span class="hl opt">);</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>cfrR<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>cf<span class="hl opt">);</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>xfer_list<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">);</span> <span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>arr_type1<span class="hl opt">);</span> <span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>arr_type2<span class="hl opt">);</span> <span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>arr_type3<span class="hl opt">);</span> <span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>ctype1<span class="hl opt">);</span> <span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>ctype2<span class="hl opt">);</span> <span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>arr_type4<span class="hl opt">);</span> <span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>arr_type5<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_conv_buffer() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_tconv</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Test some simple data type conversion stuff.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_tconv</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">char</span> <span class="hl opt">*</span> out <span class="hl opt">=</span> NULL<span class="hl opt">, *</span>in <span class="hl opt">=</span> NULL<span class="hl opt">;</span> hsize_t dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> hid_t space <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> dataset <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwb">int</span> i<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>out <span class="hl opt">= (</span><span class="hl kwb">char</span> <span class="hl opt">*)</span><span class="hl kwd">HDmalloc</span><span class="hl opt">((</span><span class="hl kwb">size_t</span><span class="hl opt">)(</span><span class="hl num">4</span> <span class="hl opt">*</span> <span class="hl num">1000</span> <span class="hl opt">*</span> <span class="hl num">1000</span><span class="hl opt">))) ==</span> NULL<span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>in <span class="hl opt">= (</span><span class="hl kwb">char</span> <span class="hl opt">*)</span><span class="hl kwd">HDmalloc</span><span class="hl opt">((</span><span class="hl kwb">size_t</span><span class="hl opt">)(</span><span class="hl num">4</span> <span class="hl opt">*</span> <span class="hl num">1000</span> <span class="hl opt">*</span> <span class="hl num">1000</span><span class="hl opt">))) ==</span> NULL<span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"data type conversion"</span><span class="hl opt">);</span> <span class="hl com">/* Initialize the dataset */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl num">1000000</span><span class="hl opt">;</span> i<span class="hl opt">++) {</span> out<span class="hl opt">[</span>i <span class="hl opt">*</span> <span class="hl num">4</span> <span class="hl opt">+</span> <span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">0x11</span><span class="hl opt">;</span> out<span class="hl opt">[</span>i <span class="hl opt">*</span> <span class="hl num">4</span> <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">0x22</span><span class="hl opt">;</span> out<span class="hl opt">[</span>i <span class="hl opt">*</span> <span class="hl num">4</span> <span class="hl opt">+</span> <span class="hl num">2</span><span class="hl opt">] =</span> <span class="hl num">0x33</span><span class="hl opt">;</span> out<span class="hl opt">[</span>i <span class="hl opt">*</span> <span class="hl num">4</span> <span class="hl opt">+</span> <span class="hl num">3</span><span class="hl opt">] =</span> <span class="hl num">0x44</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/* Create the data space */</span> dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">1000000</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the data set */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_TCONV_NAME<span class="hl opt">,</span> H5T_STD_I32LE<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Write the data to the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_STD_I32LE<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> out<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Read data with byte order conversion */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_STD_I32BE<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> in<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Check */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl num">1000000</span><span class="hl opt">;</span> i<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>in<span class="hl opt">[</span><span class="hl num">4</span> <span class="hl opt">*</span> i <span class="hl opt">+</span> <span class="hl num">0</span><span class="hl opt">] !=</span> out<span class="hl opt">[</span><span class="hl num">4</span> <span class="hl opt">*</span> i <span class="hl opt">+</span> <span class="hl num">3</span><span class="hl opt">] ||</span> in<span class="hl opt">[</span><span class="hl num">4</span> <span class="hl opt">*</span> i <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">] !=</span> out<span class="hl opt">[</span><span class="hl num">4</span> <span class="hl opt">*</span> i <span class="hl opt">+</span> <span class="hl num">2</span><span class="hl opt">] ||</span> in<span class="hl opt">[</span><span class="hl num">4</span> <span class="hl opt">*</span> i <span class="hl opt">+</span> <span class="hl num">2</span><span class="hl opt">] !=</span> out<span class="hl opt">[</span><span class="hl num">4</span> <span class="hl opt">*</span> i <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">] ||</span> in<span class="hl opt">[</span><span class="hl num">4</span> <span class="hl opt">*</span> i <span class="hl opt">+</span> <span class="hl num">3</span><span class="hl opt">] !=</span> out<span class="hl opt">[</span><span class="hl num">4</span> <span class="hl opt">*</span> i <span class="hl opt">+</span> <span class="hl num">0</span><span class="hl opt">]) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" Read with byte order conversion failed."</span><span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>out<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>in<span class="hl opt">);</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" PASSED"</span><span class="hl opt">);</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>out<span class="hl opt">)</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>out<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>in<span class="hl opt">)</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>in<span class="hl opt">);</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_tconv() */</span> <span class="hl com">/* This message derives from H5Z */</span> <span class="hl kwb">const</span> H5Z_class2_t H5Z_BOGUS<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {{</span> H5Z_CLASS_T_VERS<span class="hl opt">,</span> <span class="hl com">/* H5Z_class_t version */</span> H5Z_FILTER_BOGUS<span class="hl opt">,</span> <span class="hl com">/* Filter id number */</span> <span class="hl num">1</span><span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> <span class="hl com">/* Encoding and decoding enabled */</span> <span class="hl str">"bogus"</span><span class="hl opt">,</span> <span class="hl com">/* Filter name for debugging */</span> NULL<span class="hl opt">,</span> <span class="hl com">/* The "can apply" callback */</span> NULL<span class="hl opt">,</span> <span class="hl com">/* The "set local" callback */</span> filter_bogus<span class="hl opt">,</span> <span class="hl com">/* The actual filter function */</span> <span class="hl opt">}};</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: can_apply_bogus</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: A bogus 'can apply' callback that returns 0 for H5T_NATIVE_DOUBLE</span> <span class="hl com"> * dataype, but returns 1 for all other datatypes</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: Described above</span> <span class="hl com"> * Failure: 0</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> htri_t <span class="hl kwd">can_apply_bogus</span><span class="hl opt">(</span>hid_t H5_ATTR_UNUSED dcpl_id<span class="hl opt">,</span> hid_t type_id<span class="hl opt">,</span> hid_t H5_ATTR_UNUSED space_id<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tequal</span><span class="hl opt">(</span>type_id<span class="hl opt">,</span> H5T_NATIVE_DOUBLE<span class="hl opt">))</span> <span class="hl kwa">return</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwa">else if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tequal</span><span class="hl opt">(</span>type_id<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">))</span> <span class="hl kwa">return</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">else</span> <span class="hl kwa">return</span> <span class="hl opt">-</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end can_apply_bogus() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: filter_bogus</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: A bogus compression method that doesn't do anything.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: Data chunk size</span> <span class="hl com"> * Failure: 0</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static size_t</span> <span class="hl kwd">filter_bogus</span><span class="hl opt">(</span><span class="hl kwb">unsigned int</span> H5_ATTR_UNUSED flags<span class="hl opt">,</span> <span class="hl kwb">size_t</span> H5_ATTR_UNUSED cd_nelmts<span class="hl opt">,</span> <span class="hl kwb">const unsigned int</span> H5_ATTR_UNUSED <span class="hl opt">*</span>cd_values<span class="hl opt">,</span> <span class="hl kwb">size_t</span> nbytes<span class="hl opt">,</span> <span class="hl kwb">size_t</span> H5_ATTR_UNUSED <span class="hl opt">*</span>buf_size<span class="hl opt">,</span> <span class="hl kwb">void</span> H5_ATTR_UNUSED <span class="hl opt">**</span>buf<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwa">return</span> nbytes<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end filter_bogus() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: set_local_bogus2</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: A 'set local' callback that stores the size of the datatype</span> <span class="hl com"> * and adds it to all the H5T_NATIVE_INT values during</span> <span class="hl com"> * filter operation.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: non-negative</span> <span class="hl com"> * Failure: negative</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">set_local_bogus2</span><span class="hl opt">(</span>hid_t dcpl_id<span class="hl opt">,</span> hid_t type_id<span class="hl opt">,</span> hid_t H5_ATTR_UNUSED space_id<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">unsigned</span> add_on <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl com">/* Value to add to data going through */</span> <span class="hl kwb">unsigned</span> flags<span class="hl opt">;</span> <span class="hl com">/* Filter flags */</span> <span class="hl kwb">size_t</span> cd_nelmts <span class="hl opt">=</span> BOGUS2_PERM_NPARMS<span class="hl opt">;</span> <span class="hl com">/* Number of filter parameters */</span> <span class="hl kwb">unsigned</span> cd_values<span class="hl opt">[</span><span class="hl num">4</span><span class="hl opt">];</span> <span class="hl com">/* Filter parameters */</span> <span class="hl com">/* Check for native integer datatype and set private property */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tequal</span><span class="hl opt">(</span>type_id<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">) ></span> <span class="hl num">0</span><span class="hl opt">)</span> add_on <span class="hl opt">= (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span><span class="hl kwd">H5Tget_size</span><span class="hl opt">(</span>type_id<span class="hl opt">);</span> <span class="hl com">/* Get the filter's current parameters */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_filter_by_id2</span><span class="hl opt">(</span>dcpl_id<span class="hl opt">,</span> H5Z_FILTER_SET_LOCAL_TEST<span class="hl opt">, &</span>flags<span class="hl opt">, &</span>cd_nelmts<span class="hl opt">,</span> cd_values<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">0</span><span class="hl opt">,</span> NULL<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">return</span> <span class="hl opt">(</span>FAIL<span class="hl opt">);</span> <span class="hl com">/* Check that the parameter values were passed along correctly */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>cd_values<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] !=</span> BOGUS2_PARAM_1<span class="hl opt">)</span> <span class="hl kwa">return</span> <span class="hl opt">(</span>FAIL<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>cd_values<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] !=</span> BOGUS2_PARAM_2<span class="hl opt">)</span> <span class="hl kwa">return</span> <span class="hl opt">(</span>FAIL<span class="hl opt">);</span> <span class="hl com">/* Set "local" parameters for this dataset */</span> cd_values<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = (</span><span class="hl kwb">unsigned</span><span class="hl opt">)(</span>add_on <span class="hl opt">></span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl com">/* Flag to indicate data is modified */</span> cd_values<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">] =</span> add_on<span class="hl opt">;</span> <span class="hl com">/* Amount the data was modified by */</span> <span class="hl com">/* Modify the filter's parameters for this dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pmodify_filter</span><span class="hl opt">(</span>dcpl_id<span class="hl opt">,</span> H5Z_FILTER_SET_LOCAL_TEST<span class="hl opt">,</span> flags<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>BOGUS2_ALL_NPARMS<span class="hl opt">,</span> cd_values<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">return</span> <span class="hl opt">(</span>FAIL<span class="hl opt">);</span> <span class="hl kwa">return</span> <span class="hl opt">(</span>SUCCEED<span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end set_local_bogus2() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: filter_bogus2</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: A filter method that adds a value to data values on writing</span> <span class="hl com"> * (if the parameter is set), but does not modify data values on</span> <span class="hl com"> * reading (so that correct operation of the filter can be</span> <span class="hl com"> * checked).</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: Data chunk size</span> <span class="hl com"> * Failure: 0</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static size_t</span> <span class="hl kwd">filter_bogus2</span><span class="hl opt">(</span><span class="hl kwb">unsigned int</span> flags<span class="hl opt">,</span> <span class="hl kwb">size_t</span> cd_nelmts<span class="hl opt">,</span> <span class="hl kwb">const unsigned int</span> <span class="hl opt">*</span>cd_values<span class="hl opt">,</span> <span class="hl kwb">size_t</span> nbytes<span class="hl opt">,</span> <span class="hl kwb">size_t</span> <span class="hl opt">*</span>buf_size<span class="hl opt">,</span> <span class="hl kwb">void</span> <span class="hl opt">**</span>buf<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl com">/* Check for the correct number of parameters */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>cd_nelmts <span class="hl opt">!=</span> BOGUS2_ALL_NPARMS<span class="hl opt">)</span> <span class="hl kwa">return</span> <span class="hl opt">(</span><span class="hl num">0</span><span class="hl opt">);</span> <span class="hl com">/* Check that permanent parameters are set correctly */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>cd_values<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] !=</span> BOGUS2_PARAM_1<span class="hl opt">)</span> <span class="hl kwa">return</span> <span class="hl opt">(</span><span class="hl num">0</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>cd_values<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] !=</span> BOGUS2_PARAM_2<span class="hl opt">)</span> <span class="hl kwa">return</span> <span class="hl opt">(</span><span class="hl num">0</span><span class="hl opt">);</span> <span class="hl com">/* Check if this filter is supposed to do something */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>cd_values<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] ></span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl com">/* Check whether we are "uncompressing" */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>flags <span class="hl opt">&</span> H5Z_FLAG_REVERSE<span class="hl opt">) {</span> <span class="hl com">/* Do nothing */</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* "Compressing" */</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwb">unsigned</span> add_on <span class="hl opt">=</span> cd_values<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">];</span> <span class="hl com">/* Get "add on" value */</span> <span class="hl kwb">int</span> <span class="hl opt">*</span> int_ptr <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">*)*</span>buf<span class="hl opt">;</span> <span class="hl com">/* Pointer to the data values */</span> <span class="hl kwb">size_t</span> buf_left <span class="hl opt">= *</span>buf_size<span class="hl opt">;</span> <span class="hl com">/* Amount of data buffer left to process */</span> <span class="hl com">/* Add the "add on" value to all the data values */</span> <span class="hl kwa">while</span> <span class="hl opt">(</span>buf_left <span class="hl opt">></span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl opt">*</span>int_ptr<span class="hl opt">++ += (</span><span class="hl kwb">int</span><span class="hl opt">)</span>add_on<span class="hl opt">;</span> buf_left <span class="hl opt">-=</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end while */</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> <span class="hl kwa">return</span> <span class="hl opt">(</span>nbytes<span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Filter is "no op" */</span> <span class="hl kwa">else</span> <span class="hl kwa">return</span> <span class="hl opt">(</span>nbytes<span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end filter_bogus2() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: filter_bogus3</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: A bogus compression method that returns a failure.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: Data chunk size</span> <span class="hl com"> * Failure: 0</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static size_t</span> <span class="hl kwd">filter_bogus3</span><span class="hl opt">(</span><span class="hl kwb">unsigned int</span> H5_ATTR_UNUSED flags<span class="hl opt">,</span> <span class="hl kwb">size_t</span> H5_ATTR_UNUSED cd_nelmts<span class="hl opt">,</span> <span class="hl kwb">const unsigned int</span> H5_ATTR_UNUSED <span class="hl opt">*</span>cd_values<span class="hl opt">,</span> <span class="hl kwb">size_t</span> H5_ATTR_UNUSED nbytes<span class="hl opt">,</span> <span class="hl kwb">size_t</span> H5_ATTR_UNUSED <span class="hl opt">*</span>buf_size<span class="hl opt">,</span> <span class="hl kwb">void</span> H5_ATTR_UNUSED <span class="hl opt">**</span>buf<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwa">return</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end filter_bogus3() */</span> <span class="hl com">/* This message derives from H5Z */</span> <span class="hl kwb">const</span> H5Z_class2_t H5Z_CORRUPT<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {{</span> H5Z_CLASS_T_VERS<span class="hl opt">,</span> <span class="hl com">/* H5Z_class_t version */</span> H5Z_FILTER_CORRUPT<span class="hl opt">,</span> <span class="hl com">/* Filter id number */</span> <span class="hl num">1</span><span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> <span class="hl com">/* Encoding and decoding enabled */</span> <span class="hl str">"corrupt"</span><span class="hl opt">,</span> <span class="hl com">/* Filter name for debugging */</span> NULL<span class="hl opt">,</span> <span class="hl com">/* The "can apply" callback */</span> NULL<span class="hl opt">,</span> <span class="hl com">/* The "set local" callback */</span> filter_corrupt<span class="hl opt">,</span> <span class="hl com">/* The actual filter function */</span> <span class="hl opt">}};</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: filter_corrupt</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: For testing Fletcher32 checksum. modify data slightly during</span> <span class="hl com"> * writing so that when data is read back, the checksum should</span> <span class="hl com"> * fail.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: Data chunk size</span> <span class="hl com"> * Failure: 0</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static size_t</span> <span class="hl kwd">filter_corrupt</span><span class="hl opt">(</span><span class="hl kwb">unsigned int</span> flags<span class="hl opt">,</span> <span class="hl kwb">size_t</span> cd_nelmts<span class="hl opt">,</span> <span class="hl kwb">const unsigned int</span> <span class="hl opt">*</span>cd_values<span class="hl opt">,</span> <span class="hl kwb">size_t</span> nbytes<span class="hl opt">,</span> <span class="hl kwb">size_t</span> <span class="hl opt">*</span>buf_size<span class="hl opt">,</span> <span class="hl kwb">void</span> <span class="hl opt">**</span>buf<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">void</span> <span class="hl opt">*</span> data <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">unsigned char</span> <span class="hl opt">*</span>dst <span class="hl opt">= (</span><span class="hl kwb">unsigned char</span> <span class="hl opt">*)(*</span>buf<span class="hl opt">);</span> <span class="hl kwb">unsigned int</span> offset<span class="hl opt">;</span> <span class="hl kwb">unsigned int</span> length<span class="hl opt">;</span> <span class="hl kwb">unsigned int</span> value<span class="hl opt">;</span> <span class="hl kwb">size_t</span> ret_value <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>cd_nelmts <span class="hl opt">!=</span> <span class="hl num">3</span> <span class="hl opt">|| !</span>cd_values<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> offset <span class="hl opt">=</span> cd_values<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> length <span class="hl opt">=</span> cd_values<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> value <span class="hl opt">=</span> cd_values<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>offset <span class="hl opt">></span> nbytes <span class="hl opt">|| (</span>offset <span class="hl opt">+</span> length<span class="hl opt">) ></span> nbytes <span class="hl opt">||</span> length <span class="hl opt"><</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">unsigned int</span><span class="hl opt">))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>data <span class="hl opt">=</span> <span class="hl kwd">HDmalloc</span><span class="hl opt">((</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>length<span class="hl opt">)))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwd">HDmemset</span><span class="hl opt">(</span>data<span class="hl opt">, (</span><span class="hl kwb">int</span><span class="hl opt">)</span>value<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>length<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>flags <span class="hl opt">&</span> H5Z_FLAG_REVERSE<span class="hl opt">) {</span> <span class="hl com">/* Varify data is actually corrupted during read */</span> dst <span class="hl opt">+=</span> offset<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">HDmemcmp</span><span class="hl opt">(</span>data<span class="hl opt">,</span> dst<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>length<span class="hl opt">) !=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl opt">*</span>buf_size <span class="hl opt">=</span> nbytes<span class="hl opt">;</span> ret_value <span class="hl opt">=</span> nbytes<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl com">/* Write corrupted data */</span> dst <span class="hl opt">+=</span> offset<span class="hl opt">;</span> <span class="hl kwd">HDmemcpy</span><span class="hl opt">(</span>dst<span class="hl opt">,</span> data<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>length<span class="hl opt">);</span> <span class="hl opt">*</span>buf_size <span class="hl opt">=</span> nbytes<span class="hl opt">;</span> ret_value <span class="hl opt">= *</span>buf_size<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> error<span class="hl opt">:</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>data<span class="hl opt">)</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>data<span class="hl opt">);</span> <span class="hl kwa">return</span> ret_value<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end filter_corrupt() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: filter_cb_cont</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Callback function to handle checksum failure. Let it continue.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: continue</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> H5Z_cb_return_t <span class="hl kwd">filter_cb_cont</span><span class="hl opt">(</span>H5Z_filter_t filter<span class="hl opt">,</span> <span class="hl kwb">void</span> H5_ATTR_UNUSED <span class="hl opt">*</span>buf<span class="hl opt">,</span> <span class="hl kwb">size_t</span> H5_ATTR_UNUSED buf_size<span class="hl opt">,</span> <span class="hl kwb">void</span> H5_ATTR_UNUSED <span class="hl opt">*</span>op_data<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>H5Z_FILTER_FLETCHER32 <span class="hl opt">==</span> filter<span class="hl opt">)</span> <span class="hl kwa">return</span> H5Z_CB_CONT<span class="hl opt">;</span> <span class="hl kwa">else</span> <span class="hl kwa">return</span> H5Z_CB_FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end filter_cb_cont() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: filter_cb_fail</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Callback function to handle checksum failure. Let it fail.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: fail</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> H5Z_cb_return_t <span class="hl kwd">filter_cb_fail</span><span class="hl opt">(</span>H5Z_filter_t filter<span class="hl opt">,</span> <span class="hl kwb">void</span> H5_ATTR_UNUSED <span class="hl opt">*</span>buf<span class="hl opt">,</span> <span class="hl kwb">size_t</span> H5_ATTR_UNUSED buf_size<span class="hl opt">,</span> <span class="hl kwb">void</span> H5_ATTR_UNUSED <span class="hl opt">*</span>op_data<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>H5Z_FILTER_FLETCHER32 <span class="hl opt">==</span> filter<span class="hl opt">)</span> <span class="hl kwa">return</span> H5Z_CB_FAIL<span class="hl opt">;</span> <span class="hl kwa">else</span> <span class="hl kwa">return</span> H5Z_CB_CONT<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end filter_cb_fail() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_filter_internal</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests dataset compression. If compression is requested when</span> <span class="hl com"> * it hasn't been compiled into the library (such as when</span> <span class="hl com"> * updating an existing compressed dataset) then data is sent to</span> <span class="hl com"> * the file uncompressed but no errors are returned.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_filter_internal</span><span class="hl opt">(</span>hid_t fid<span class="hl opt">,</span> <span class="hl kwb">const char</span> <span class="hl opt">*</span>name<span class="hl opt">,</span> hid_t dcpl<span class="hl opt">,</span> <span class="hl kwb">int</span> if_fletcher32<span class="hl opt">,</span> <span class="hl kwb">int</span> corrupted<span class="hl opt">,</span> hsize_t <span class="hl opt">*</span>dset_size<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t dataset<span class="hl opt">;</span> <span class="hl com">/* Dataset ID */</span> hid_t dxpl<span class="hl opt">;</span> <span class="hl com">/* Dataset xfer property list ID */</span> hid_t write_dxpl<span class="hl opt">;</span> <span class="hl com">/* Dataset xfer property list ID for writing */</span> hid_t sid<span class="hl opt">;</span> <span class="hl com">/* Dataspace ID */</span> <span class="hl kwb">const</span> hsize_t size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span>DSET_DIM1<span class="hl opt">,</span> DSET_DIM2<span class="hl opt">};</span> <span class="hl com">/* Dataspace dimensions */</span> <span class="hl kwb">const</span> hsize_t hs_offset<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span>FILTER_HS_OFFSET1<span class="hl opt">,</span> FILTER_HS_OFFSET2<span class="hl opt">};</span> <span class="hl com">/* Hyperslab offset */</span> <span class="hl kwb">const</span> hsize_t hs_size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span>FILTER_HS_SIZE1<span class="hl opt">,</span> FILTER_HS_SIZE2<span class="hl opt">};</span> <span class="hl com">/* Hyperslab size */</span> <span class="hl kwb">void</span> <span class="hl opt">*</span> tconv_buf <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl com">/* Temporary conversion buffer */</span> <span class="hl kwb">size_t</span> i<span class="hl opt">,</span> j<span class="hl opt">,</span> n<span class="hl opt">;</span> <span class="hl com">/* Local index variables */</span> herr_t status<span class="hl opt">;</span> <span class="hl com">/* Error status */</span> <span class="hl com">/* Create the data space */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> size<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/*</span> <span class="hl com"> * Create a small conversion buffer to test strip mining. We</span> <span class="hl com"> * might as well test all we can!</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dxpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_XFER<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> tconv_buf <span class="hl opt">=</span> <span class="hl kwd">HDmalloc</span><span class="hl opt">((</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">1000</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_buffer</span><span class="hl opt">(</span>dxpl<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">1000</span><span class="hl opt">,</span> tconv_buf<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>write_dxpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcopy</span><span class="hl opt">(</span>dxpl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>if_fletcher32 <span class="hl opt">==</span> DISABLE_FLETCHER32<span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_edc_check</span><span class="hl opt">(</span>dxpl<span class="hl opt">,</span> H5Z_DISABLE_EDC<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>H5Z_DISABLE_EDC <span class="hl opt">!=</span> <span class="hl kwd">H5Pget_edc_check</span><span class="hl opt">(</span>dxpl<span class="hl opt">))</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" filters (setup)"</span><span class="hl opt">);</span> <span class="hl com">/* Check if all the filters are available */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pall_filters_avail</span><span class="hl opt">(</span>dcpl<span class="hl opt">) !=</span> TRUE<span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Incorrect filter availability</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Create the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> name<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 1: Read uninitialized data. It should be zero.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" filters (uninitialized read)"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> dxpl<span class="hl opt">,</span> check_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">!=</span> check<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read a non-zero value.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %lu,%lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>i<span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>j<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 2: Test filters by setting up a chunked dataset and writing</span> <span class="hl com"> * to it.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" filters (write)"</span><span class="hl opt">);</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> n <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> points<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] = (</span><span class="hl kwb">int</span><span class="hl opt">)(</span>n<span class="hl opt">++);</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> write_dxpl<span class="hl opt">,</span> points_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((*</span>dset_size <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dataset<span class="hl opt">)) ==</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 3: Try to read the data we just wrote.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" filters (read)"</span><span class="hl opt">);</span> <span class="hl com">/* Read the dataset back */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>corrupted<span class="hl opt">) {</span> <span class="hl com">/* Default behavior is failure when data is corrupted. */</span> <span class="hl com">/* (Use the "write" DXPL in order to make certain corruption is seen) */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> write_dxpl<span class="hl opt">,</span> check_data<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Callback decides to continue in spite data is corrupted. */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_filter_callback</span><span class="hl opt">(</span>dxpl<span class="hl opt">,</span> filter_cb_cont<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> dxpl<span class="hl opt">,</span> check_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Callback decides to fail when data is corrupted. */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_filter_callback</span><span class="hl opt">(</span>write_dxpl<span class="hl opt">,</span> filter_cb_fail<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* (Use the "write" DXPL in order to make certain corruption is seen) */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> write_dxpl<span class="hl opt">,</span> check_data<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> dxpl<span class="hl opt">,</span> check_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Check that the values read are the same as the values written */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>points<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] !=</span> check<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDfprintf</span><span class="hl opt">(</span>stderr<span class="hl opt">,</span> <span class="hl str">" Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDfprintf</span><span class="hl opt">(</span>stderr<span class="hl opt">,</span> <span class="hl str">" At index %lu,%lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>i<span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>j<span class="hl opt">);</span> <span class="hl kwd">HDfprintf</span><span class="hl opt">(</span>stderr<span class="hl opt">,</span> <span class="hl str">" At original: %d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">int</span><span class="hl opt">)</span>points<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]);</span> <span class="hl kwd">HDfprintf</span><span class="hl opt">(</span>stderr<span class="hl opt">,</span> <span class="hl str">" At returned: %d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">int</span><span class="hl opt">)</span>check<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 4: Write new data over the top of the old data. The new data is</span> <span class="hl com"> * random thus not very compressible, and will cause the chunks to move</span> <span class="hl com"> * around as they grow. We only change values for the left half of the</span> <span class="hl com"> * dataset although we rewrite the whole thing.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" filters (modify)"</span><span class="hl opt">);</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] /</span> <span class="hl num">2</span><span class="hl opt">;</span> j<span class="hl opt">++) {</span> points<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] = (</span><span class="hl kwb">int</span><span class="hl opt">)</span><span class="hl kwd">HDrandom</span><span class="hl opt">();</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> write_dxpl<span class="hl opt">,</span> points_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>corrupted<span class="hl opt">) {</span> <span class="hl com">/* Default behavior is failure when data is corrupted. */</span> <span class="hl com">/* (Use the "write" DXPL in order to make certain corruption is seen) */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> write_dxpl<span class="hl opt">,</span> check_data<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Callback decides to continue in spite data is corrupted. */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_filter_callback</span><span class="hl opt">(</span>dxpl<span class="hl opt">,</span> filter_cb_cont<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> dxpl<span class="hl opt">,</span> check_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Callback decides to fail when data is corrupted. */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_filter_callback</span><span class="hl opt">(</span>write_dxpl<span class="hl opt">,</span> filter_cb_fail<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* (Use the "write" DXPL in order to make certain corruption is seen) */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> write_dxpl<span class="hl opt">,</span> check_data<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl com">/* Read the dataset back and check it */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> dxpl<span class="hl opt">,</span> check_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Check that the values read are the same as the values written */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>points<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] !=</span> check<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %lu,%lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>i<span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>j<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl kwa">if</span> <span class="hl opt">((*</span>dset_size <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dataset<span class="hl opt">)) ==</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 5: Close the dataset and then open it and read it again. This</span> <span class="hl com"> * insures that the filters message is picked up properly from the</span> <span class="hl com"> * object header.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" filters (re-open)"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> name<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>corrupted<span class="hl opt">) {</span> <span class="hl com">/* Default behavior is failure when data is corrupted. */</span> <span class="hl com">/* (Use the "write" DXPL in order to make certain corruption is seen) */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> write_dxpl<span class="hl opt">,</span> check_data<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Callback decides to continue in spite data is corrupted. */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_filter_callback</span><span class="hl opt">(</span>dxpl<span class="hl opt">,</span> filter_cb_cont<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> dxpl<span class="hl opt">,</span> check_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Callback decides to fail when data is corrupted. */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_filter_callback</span><span class="hl opt">(</span>write_dxpl<span class="hl opt">,</span> filter_cb_fail<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* (Use the "write" DXPL in order to make certain corruption is seen) */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> write_dxpl<span class="hl opt">,</span> check_data<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> dxpl<span class="hl opt">,</span> check_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Check that the values read are the same as the values written */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>points<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] !=</span> check<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %lu,%lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>i<span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>j<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 6: Test partial I/O by writing to and then reading from a</span> <span class="hl com"> * hyperslab of the dataset. The hyperslab does not line up on chunk</span> <span class="hl com"> * boundaries (we know that case already works from above tests).</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" filters (partial I/O)"</span><span class="hl opt">);</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>hs_size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>hs_size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> points<span class="hl opt">[(</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>hs_offset<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] +</span> i<span class="hl opt">][(</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>hs_offset<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] +</span> j<span class="hl opt">] = (</span><span class="hl kwb">int</span><span class="hl opt">)</span><span class="hl kwd">HDrandom</span><span class="hl opt">();</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> hs_offset<span class="hl opt">,</span> NULL<span class="hl opt">,</span> hs_size<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* (Use the "read" DXPL because partial I/O on corrupted data test needs to ignore errors during writing)</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> dxpl<span class="hl opt">,</span> points_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>corrupted<span class="hl opt">) {</span> <span class="hl com">/* Default behavior is failure when data is corrupted. */</span> <span class="hl com">/* (Use the "write" DXPL in order to make certain corruption is seen) */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> write_dxpl<span class="hl opt">,</span> check_data<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Callback decides to continue in spite data is corrupted. */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_filter_callback</span><span class="hl opt">(</span>dxpl<span class="hl opt">,</span> filter_cb_cont<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> dxpl<span class="hl opt">,</span> check_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Callback decides to fail when data is corrupted. */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_filter_callback</span><span class="hl opt">(</span>write_dxpl<span class="hl opt">,</span> filter_cb_fail<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* (Use the "write" DXPL in order to make certain corruption is seen) */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> write_dxpl<span class="hl opt">,</span> check_data<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> dxpl<span class="hl opt">,</span> check_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Check that the values read are the same as the values written */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>hs_size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>hs_size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>points<span class="hl opt">[(</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>hs_offset<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] +</span> i<span class="hl opt">][(</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>hs_offset<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] +</span> j<span class="hl opt">] !=</span> check<span class="hl opt">[(</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>hs_offset<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] +</span> i<span class="hl opt">][(</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>hs_offset<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] +</span> j<span class="hl opt">]) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDfprintf</span><span class="hl opt">(</span>stderr<span class="hl opt">,</span> <span class="hl str">" Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDfprintf</span><span class="hl opt">(</span>stderr<span class="hl opt">,</span> <span class="hl str">" At index %lu,%lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)((</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>hs_offset<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] +</span> i<span class="hl opt">),</span> <span class="hl opt">(</span><span class="hl kwb">unsigned long</span><span class="hl opt">)((</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>hs_offset<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] +</span> j<span class="hl opt">));</span> <span class="hl kwd">HDfprintf</span><span class="hl opt">(</span>stderr<span class="hl opt">,</span> <span class="hl str">" At original: %d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> <span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">)</span>points<span class="hl opt">[(</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>hs_offset<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] +</span> i<span class="hl opt">][(</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>hs_offset<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] +</span> j<span class="hl opt">]);</span> <span class="hl kwd">HDfprintf</span><span class="hl opt">(</span>stderr<span class="hl opt">,</span> <span class="hl str">" At returned: %d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> <span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">)</span>check<span class="hl opt">[(</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>hs_offset<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] +</span> i<span class="hl opt">][(</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>hs_offset<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] +</span> j<span class="hl opt">]);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl com">/* Get the storage size of the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((*</span>dset_size <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dataset<span class="hl opt">)) ==</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/* Clean up objects used for this test */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dxpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>write_dxpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>tconv_buf<span class="hl opt">);</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>tconv_buf<span class="hl opt">)</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>tconv_buf<span class="hl opt">);</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_filter_internal() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_filter_noencoder</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests filters with no encoder present. Ensures that data</span> <span class="hl com"> * can still be decoded correctly and that errors are thrown</span> <span class="hl com"> * when the application tries to write.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_SZIP</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_filter_noencoder</span><span class="hl opt">(</span><span class="hl kwb">const char</span> <span class="hl opt">*</span>dset_name<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t file_id <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hid_t dset_id <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hid_t test_dset_id <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hid_t dcpl_id <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hid_t space_id <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hsize_t dims <span class="hl opt">=</span> <span class="hl num">10</span><span class="hl opt">;</span> herr_t err<span class="hl opt">;</span> <span class="hl kwb">int</span> test_ints<span class="hl opt">[</span><span class="hl num">10</span><span class="hl opt">] = {</span><span class="hl num">12</span><span class="hl opt">};</span> <span class="hl kwb">int</span> read_buf<span class="hl opt">[</span><span class="hl num">10</span><span class="hl opt">];</span> <span class="hl kwb">int</span> i<span class="hl opt">;</span> <span class="hl com">/* Make a local copy of the file since this test writes to the data file</span> <span class="hl com"> from svn. */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">h5_make_local_copy</span><span class="hl opt">(</span>NOENCODER_FILENAME<span class="hl opt">,</span> NOENCODER_COPY_FILENAME<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Open file */</span> file_id <span class="hl opt">=</span> <span class="hl kwd">H5Fopen</span><span class="hl opt">(</span>NOENCODER_COPY_FILENAME<span class="hl opt">,</span> H5F_ACC_RDWR<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>file_id <span class="hl opt"><</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> dset_id <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>file_id<span class="hl opt">,</span> dset_name<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dset_id <span class="hl opt"><</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> space_id <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">, &</span>dims<span class="hl opt">,</span> NULL<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>space_id <span class="hl opt"><</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" decoding without encoder"</span><span class="hl opt">);</span> <span class="hl com">/* Read the dataset and make sure the decoder is working correctly */</span> err <span class="hl opt">=</span> <span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dset_id<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> space_id<span class="hl opt">,</span> space_id<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> read_buf<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>err <span class="hl opt"><</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl num">10</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>read_buf<span class="hl opt">[</span>i<span class="hl opt">] !=</span> i<span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space_id<span class="hl opt">);</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/* Attempt to copy the DCPL and use it to create a new dataset.</span> <span class="hl com"> * Since the filter does not have an encoder, the creation</span> <span class="hl com"> * should fail.</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" trying to write without encoder"</span><span class="hl opt">);</span> dcpl_id <span class="hl opt">=</span> <span class="hl kwd">H5Dget_create_plist</span><span class="hl opt">(</span>dset_id<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dcpl_id <span class="hl opt"><</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> space_id <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">, &</span>dims<span class="hl opt">,</span> NULL<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>space_id <span class="hl opt"><</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> test_dset_id <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file_id<span class="hl opt">,</span> NOENCODER_TEST_DATASET<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> space_id<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl_id<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY <span class="hl kwa">if</span> <span class="hl opt">(</span>test_dset_id <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Attempt to extend the dataset. This should fail because</span> <span class="hl com"> * the dataset has a fill value and is instructed to fill on</span> <span class="hl com"> * allocation.</span> <span class="hl com"> */</span> dims <span class="hl opt">=</span> <span class="hl num">20</span><span class="hl opt">;</span> <span class="hl com">/* Dataset is originally of size 10 */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> err <span class="hl opt">=</span> <span class="hl kwd">H5Dset_extent</span><span class="hl opt">(</span>dset_id<span class="hl opt">, &</span>dims<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY <span class="hl kwa">if</span> <span class="hl opt">(</span>err <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Attempt to write to the dataset. This should fail because</span> <span class="hl com"> * the filter does not have an encoder.</span> <span class="hl com"> */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> err <span class="hl opt">=</span> <span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dset_id<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> test_ints<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY <span class="hl kwa">if</span> <span class="hl opt">(</span>err <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file_id<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dset_id<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space_id<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl_id<span class="hl opt">);</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dset_id <span class="hl opt">!= -</span><span class="hl num">1</span><span class="hl opt">)</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dset_id<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>test_dset_id <span class="hl opt">!= -</span><span class="hl num">1</span><span class="hl opt">)</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>test_dset_id<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>space_id <span class="hl opt">!= -</span><span class="hl num">1</span><span class="hl opt">)</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space_id<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dcpl_id <span class="hl opt">!= -</span><span class="hl num">1</span><span class="hl opt">)</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl_id<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>file_id <span class="hl opt">!= -</span><span class="hl num">1</span><span class="hl opt">)</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file_id<span class="hl opt">);</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_filter_noencoder() */</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_SZIP */</span><span class="hl ppc"></span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_get_filter_info</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests the H5Zget_filter_info function.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_get_filter_info</span><span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">unsigned int</span> flags<span class="hl opt">;</span> <span class="hl com">/* flags returned from H5Zget_filter_info */</span> herr_t err<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"H5Zget_filter_info"</span><span class="hl opt">);</span> <span class="hl com">/* Verify that each filter is reported as having the right combination</span> <span class="hl com"> * of encoder and decoder.</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Zget_filter_info</span><span class="hl opt">(</span>H5Z_FILTER_FLETCHER32<span class="hl opt">, &</span>flags<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(((</span>flags <span class="hl opt">&</span> H5Z_FILTER_CONFIG_ENCODE_ENABLED<span class="hl opt">) ==</span> <span class="hl num">0</span><span class="hl opt">) ||</span> <span class="hl opt">((</span>flags <span class="hl opt">&</span> H5Z_FILTER_CONFIG_DECODE_ENABLED<span class="hl opt">) ==</span> <span class="hl num">0</span><span class="hl opt">))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Zget_filter_info</span><span class="hl opt">(</span>H5Z_FILTER_SHUFFLE<span class="hl opt">, &</span>flags<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(((</span>flags <span class="hl opt">&</span> H5Z_FILTER_CONFIG_ENCODE_ENABLED<span class="hl opt">) ==</span> <span class="hl num">0</span><span class="hl opt">) ||</span> <span class="hl opt">((</span>flags <span class="hl opt">&</span> H5Z_FILTER_CONFIG_DECODE_ENABLED<span class="hl opt">) ==</span> <span class="hl num">0</span><span class="hl opt">))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_DEFLATE</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Zget_filter_info</span><span class="hl opt">(</span>H5Z_FILTER_DEFLATE<span class="hl opt">, &</span>flags<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(((</span>flags <span class="hl opt">&</span> H5Z_FILTER_CONFIG_ENCODE_ENABLED<span class="hl opt">) ==</span> <span class="hl num">0</span><span class="hl opt">) ||</span> <span class="hl opt">((</span>flags <span class="hl opt">&</span> H5Z_FILTER_CONFIG_DECODE_ENABLED<span class="hl opt">) ==</span> <span class="hl num">0</span><span class="hl opt">))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl ppc">#endif</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_SZIP</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Zget_filter_info</span><span class="hl opt">(</span>H5Z_FILTER_SZIP<span class="hl opt">, &</span>flags<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>H5Z_SZIP<span class="hl opt">-></span>encoder_present<span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(((</span>flags <span class="hl opt">&</span> H5Z_FILTER_CONFIG_ENCODE_ENABLED<span class="hl opt">) ==</span> <span class="hl num">0</span><span class="hl opt">) ||</span> <span class="hl opt">((</span>flags <span class="hl opt">&</span> H5Z_FILTER_CONFIG_DECODE_ENABLED<span class="hl opt">) ==</span> <span class="hl num">0</span><span class="hl opt">))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(((</span>flags <span class="hl opt">&</span> H5Z_FILTER_CONFIG_ENCODE_ENABLED<span class="hl opt">) !=</span> <span class="hl num">0</span><span class="hl opt">) ||</span> <span class="hl opt">((</span>flags <span class="hl opt">&</span> H5Z_FILTER_CONFIG_DECODE_ENABLED<span class="hl opt">) ==</span> <span class="hl num">0</span><span class="hl opt">))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_SZIP */</span><span class="hl ppc"></span> <span class="hl com">/* Verify that get_filter_info throws an error when given a bad filter */</span> <span class="hl com">/* (Depends on 1.6 compatibility flag) */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> err <span class="hl opt">=</span> <span class="hl kwd">H5Zget_filter_info</span><span class="hl opt">(-</span><span class="hl num">1</span><span class="hl opt">, &</span>flags<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>err <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_get_filter_info() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_filters</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests dataset filter.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_filters</span><span class="hl opt">(</span>hid_t file<span class="hl opt">,</span> hid_t <span class="hl ppc">#ifndef H5_HAVE_FILTER_SZIP</span> H5_ATTR_UNUSED <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_SZIP */</span><span class="hl ppc"></span> fapl<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t dc<span class="hl opt">;</span> <span class="hl com">/* Dataset creation property list ID */</span> <span class="hl kwb">const</span> hsize_t chunk_size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span>FILTER_CHUNK_DIM1<span class="hl opt">,</span> FILTER_CHUNK_DIM2<span class="hl opt">};</span> <span class="hl com">/* Chunk dimensions */</span> hsize_t null_size<span class="hl opt">;</span> <span class="hl com">/* Size of dataset with null filter */</span> hsize_t fletcher32_size<span class="hl opt">;</span> <span class="hl com">/* Size of dataset with Fletcher32 checksum */</span> <span class="hl kwb">unsigned</span> data_corrupt<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">];</span> <span class="hl com">/* position and length of data to be corrupted */</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_DEFLATE</span> hsize_t deflate_size<span class="hl opt">;</span> <span class="hl com">/* Size of dataset with deflate filter */</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_DEFLATE */</span><span class="hl ppc"></span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_SZIP</span> hsize_t szip_size<span class="hl opt">;</span> <span class="hl com">/* Size of dataset with szip filter */</span> <span class="hl kwb">unsigned</span> szip_options_mask <span class="hl opt">=</span> H5_SZIP_NN_OPTION_MASK<span class="hl opt">;</span> <span class="hl kwb">unsigned</span> szip_pixels_per_block <span class="hl opt">=</span> <span class="hl num">4</span><span class="hl opt">;</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_SZIP */</span><span class="hl ppc"></span> hsize_t shuffle_size<span class="hl opt">;</span> <span class="hl com">/* Size of dataset with shuffle filter */</span> <span class="hl ppc">#if defined(H5_HAVE_FILTER_DEFLATE) || defined(H5_HAVE_FILTER_SZIP)</span> hsize_t combo_size<span class="hl opt">;</span> <span class="hl com">/* Size of dataset with multiple filters */</span> <span class="hl ppc">#endif</span> <span class="hl com">/* defined(H5_HAVE_FILTER_DEFLATE) || defined(H5_HAVE_FILTER_SZIP) */</span><span class="hl ppc"></span> <span class="hl com">/* test the H5Zget_filter_info function */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">test_get_filter_info</span><span class="hl opt">() <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/*----------------------------------------------------------</span> <span class="hl com"> * STEP 0: Test null I/O filter by itself.</span> <span class="hl com"> *----------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">"Testing 'null' filter"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dc <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Zregister</span><span class="hl opt">(</span>H5Z_BOGUS<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_filter</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> H5Z_FILTER_BOGUS<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">0</span><span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">test_filter_internal</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_BOGUS_NAME<span class="hl opt">,</span> dc<span class="hl opt">,</span> DISABLE_FLETCHER32<span class="hl opt">,</span> DATA_NOT_CORRUPTED<span class="hl opt">, &</span>null_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Clean up objects used for this test */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/*----------------------------------------------------------</span> <span class="hl com"> * STEP 1: Test Fletcher32 Checksum by itself.</span> <span class="hl com"> *----------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">"Testing Fletcher32 checksum(enabled for read)"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dc <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_filter</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> H5Z_FILTER_FLETCHER32<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">0</span><span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Enable checksum during read */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">test_filter_internal</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_FLETCHER32_NAME<span class="hl opt">,</span> dc<span class="hl opt">,</span> ENABLE_FLETCHER32<span class="hl opt">,</span> DATA_NOT_CORRUPTED<span class="hl opt">,</span> <span class="hl opt">&</span>fletcher32_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>fletcher32_size <span class="hl opt"><=</span> null_size<span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" Size after checksumming is incorrect."</span><span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Disable checksum during read */</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">"Testing Fletcher32 checksum(disabled for read)"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">test_filter_internal</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_FLETCHER32_NAME_2<span class="hl opt">,</span> dc<span class="hl opt">,</span> DISABLE_FLETCHER32<span class="hl opt">,</span> DATA_NOT_CORRUPTED<span class="hl opt">,</span> <span class="hl opt">&</span>fletcher32_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>fletcher32_size <span class="hl opt"><=</span> null_size<span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" Size after checksumming is incorrect."</span><span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Try to corrupt data and see if checksum fails */</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">"Testing Fletcher32 checksum(when data is corrupted)"</span><span class="hl opt">);</span> data_corrupt<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">52</span><span class="hl opt">;</span> data_corrupt<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">33</span><span class="hl opt">;</span> data_corrupt<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> <span class="hl num">27</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Zregister</span><span class="hl opt">(</span>H5Z_CORRUPT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_filter</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> H5Z_FILTER_CORRUPT<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">3</span><span class="hl opt">,</span> data_corrupt<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">test_filter_internal</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_FLETCHER32_NAME_3<span class="hl opt">,</span> dc<span class="hl opt">,</span> DISABLE_FLETCHER32<span class="hl opt">,</span> DATA_CORRUPTED<span class="hl opt">,</span> <span class="hl opt">&</span>fletcher32_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>fletcher32_size <span class="hl opt"><=</span> null_size<span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" Size after checksumming is incorrect."</span><span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Clean up objects used for this test */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/*----------------------------------------------------------</span> <span class="hl com"> * STEP 2: Test deflation by itself.</span> <span class="hl com"> *----------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_DEFLATE</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">"Testing deflate filter"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dc <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_deflate</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> <span class="hl num">6</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">test_filter_internal</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_DEFLATE_NAME<span class="hl opt">,</span> dc<span class="hl opt">,</span> DISABLE_FLETCHER32<span class="hl opt">,</span> DATA_NOT_CORRUPTED<span class="hl opt">,</span> <span class="hl opt">&</span>deflate_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Clean up objects used for this test */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl ppc">#else</span> <span class="hl com">/* H5_HAVE_FILTER_DEFLATE */</span><span class="hl ppc"></span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"deflate filter"</span><span class="hl opt">);</span> <span class="hl kwd">SKIPPED</span><span class="hl opt">();</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" Deflate filter not enabled"</span><span class="hl opt">);</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_DEFLATE */</span><span class="hl ppc"></span> <span class="hl com">/*----------------------------------------------------------</span> <span class="hl com"> * STEP 3: Test szip compression by itself.</span> <span class="hl com"> *----------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_SZIP</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"szip filter (with encoder)"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">h5_szip_can_encode</span><span class="hl opt">() ==</span> <span class="hl num">1</span><span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dc <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">""</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_szip</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> szip_options_mask<span class="hl opt">,</span> szip_pixels_per_block<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">test_filter_internal</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_SZIP_NAME<span class="hl opt">,</span> dc<span class="hl opt">,</span> DISABLE_FLETCHER32<span class="hl opt">,</span> DATA_NOT_CORRUPTED<span class="hl opt">,</span> <span class="hl opt">&</span>szip_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwd">SKIPPED</span><span class="hl opt">();</span> <span class="hl opt">}</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"szip filter (without encoder)"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">h5_szip_can_encode</span><span class="hl opt">() !=</span> <span class="hl num">1</span><span class="hl opt">) {</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">""</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">test_filter_noencoder</span><span class="hl opt">(</span>NOENCODER_SZIP_DATASET<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwd">SKIPPED</span><span class="hl opt">();</span> <span class="hl opt">}</span> <span class="hl ppc">#else</span> <span class="hl com">/* H5_HAVE_FILTER_SZIP */</span><span class="hl ppc"></span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"szip filter"</span><span class="hl opt">);</span> <span class="hl kwd">SKIPPED</span><span class="hl opt">();</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" Szip filter not enabled"</span><span class="hl opt">);</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_SZIP */</span><span class="hl ppc"></span> <span class="hl com">/*----------------------------------------------------------</span> <span class="hl com"> * STEP 4: Test shuffling by itself.</span> <span class="hl com"> *----------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">"Testing shuffle filter"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dc <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_shuffle</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">test_filter_internal</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_SHUFFLE_NAME<span class="hl opt">,</span> dc<span class="hl opt">,</span> DISABLE_FLETCHER32<span class="hl opt">,</span> DATA_NOT_CORRUPTED<span class="hl opt">,</span> <span class="hl opt">&</span>shuffle_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>shuffle_size <span class="hl opt">!=</span> null_size<span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" Shuffled size not the same as uncompressed size."</span><span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Clean up objects used for this test */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/*----------------------------------------------------------</span> <span class="hl com"> * STEP 5: Test shuffle + deflate + checksum in any order.</span> <span class="hl com"> *----------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_DEFLATE</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">"Testing shuffle+deflate+checksum filters(checksum first)"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dc <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fletcher32</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_shuffle</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_deflate</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> <span class="hl num">6</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">test_filter_internal</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_SHUF_DEF_FLET_NAME<span class="hl opt">,</span> dc<span class="hl opt">,</span> ENABLE_FLETCHER32<span class="hl opt">,</span> DATA_NOT_CORRUPTED<span class="hl opt">,</span> <span class="hl opt">&</span>combo_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Clean up objects used for this test */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">"Testing shuffle+deflate+checksum filters(checksum last)"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dc <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_shuffle</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_deflate</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> <span class="hl num">6</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fletcher32</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">test_filter_internal</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_SHUF_DEF_FLET_NAME_2<span class="hl opt">,</span> dc<span class="hl opt">,</span> ENABLE_FLETCHER32<span class="hl opt">,</span> DATA_NOT_CORRUPTED<span class="hl opt">,</span> <span class="hl opt">&</span>combo_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Clean up objects used for this test */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl ppc">#else</span> <span class="hl com">/* H5_HAVE_FILTER_DEFLATE */</span><span class="hl ppc"></span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"shuffle+deflate+fletcher32 filters"</span><span class="hl opt">);</span> <span class="hl kwd">SKIPPED</span><span class="hl opt">();</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" Deflate filter not enabled"</span><span class="hl opt">);</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_DEFLATE */</span><span class="hl ppc"></span> <span class="hl com">/*----------------------------------------------------------</span> <span class="hl com"> * STEP 6: Test shuffle + szip + checksum in any order.</span> <span class="hl com"> *----------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_SZIP</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"shuffle+szip+checksum filters(checksum first, with encoder)"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dc <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fletcher32</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_shuffle</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Make sure encoding is enabled */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">h5_szip_can_encode</span><span class="hl opt">() ==</span> <span class="hl num">1</span><span class="hl opt">) {</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">""</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_szip</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> szip_options_mask<span class="hl opt">,</span> szip_pixels_per_block<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">test_filter_internal</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_SHUF_SZIP_FLET_NAME<span class="hl opt">,</span> dc<span class="hl opt">,</span> ENABLE_FLETCHER32<span class="hl opt">,</span> DATA_NOT_CORRUPTED<span class="hl opt">,</span> <span class="hl opt">&</span>combo_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwd">SKIPPED</span><span class="hl opt">();</span> <span class="hl opt">}</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"shuffle+szip+checksum filters(checksum first, without encoder)"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">h5_szip_can_encode</span><span class="hl opt">() !=</span> <span class="hl num">1</span><span class="hl opt">) {</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">""</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">test_filter_noencoder</span><span class="hl opt">(</span>NOENCODER_SZIP_SHUFF_FLETCH_DATASET<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwd">SKIPPED</span><span class="hl opt">();</span> <span class="hl opt">}</span> <span class="hl com">/* Clean up objects used for this test */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"shuffle+szip+checksum filters(checksum last, with encoder)"</span><span class="hl opt">);</span> <span class="hl com">/* Make sure encoding is enabled */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">h5_szip_can_encode</span><span class="hl opt">() ==</span> <span class="hl num">1</span><span class="hl opt">) {</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">""</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dc <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_shuffle</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_szip</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> szip_options_mask<span class="hl opt">,</span> szip_pixels_per_block<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fletcher32</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">test_filter_internal</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_SHUF_SZIP_FLET_NAME_2<span class="hl opt">,</span> dc<span class="hl opt">,</span> ENABLE_FLETCHER32<span class="hl opt">,</span> DATA_NOT_CORRUPTED<span class="hl opt">,</span> <span class="hl opt">&</span>combo_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Clean up objects used for this test */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwd">SKIPPED</span><span class="hl opt">();</span> <span class="hl opt">}</span> <span class="hl ppc">#else</span> <span class="hl com">/* H5_HAVE_FILTER_SZIP */</span><span class="hl ppc"></span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"shuffle+szip+fletcher32 filters"</span><span class="hl opt">);</span> <span class="hl kwd">SKIPPED</span><span class="hl opt">();</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" szip filter not enabled"</span><span class="hl opt">);</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_SZIP */</span><span class="hl ppc"></span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_filters() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_missing_filter</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests library behavior when filter is missing</span> <span class="hl com"> *</span> <span class="hl com"> * Return: SUCCEED/FAIL</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_missing_filter</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t fid<span class="hl opt">;</span> <span class="hl com">/* File ID */</span> hid_t dsid<span class="hl opt">;</span> <span class="hl com">/* Dataset ID */</span> hid_t sid<span class="hl opt">;</span> <span class="hl com">/* Dataspace ID */</span> hid_t dcpl<span class="hl opt">;</span> <span class="hl com">/* Dataspace creation property list ID */</span> <span class="hl kwb">const</span> hsize_t dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span>DSET_DIM1<span class="hl opt">,</span> DSET_DIM2<span class="hl opt">};</span> <span class="hl com">/* Dataspace dimensions */</span> <span class="hl kwb">const</span> hsize_t chunk_dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">25</span><span class="hl opt">};</span> <span class="hl com">/* Chunk dimensions */</span> hsize_t dset_size<span class="hl opt">;</span> <span class="hl com">/* Dataset size */</span> <span class="hl kwb">size_t</span> i<span class="hl opt">,</span> j<span class="hl opt">;</span> <span class="hl com">/* Local index variables */</span> herr_t ret<span class="hl opt">;</span> <span class="hl com">/* Generic return value */</span> <span class="hl kwb">const char</span> <span class="hl opt">*</span> testfile <span class="hl opt">=</span> <span class="hl kwd">H5_get_srcdir_filename</span><span class="hl opt">(</span>FILE_DEFLATE_NAME<span class="hl opt">);</span> <span class="hl com">/* Corrected test file name */</span> hbool_t api_ctx_pushed <span class="hl opt">=</span> FALSE<span class="hl opt">;</span> <span class="hl com">/* Whether API context pushed */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"dataset access with missing filter"</span><span class="hl opt">);</span> <span class="hl com">/* Unregister the deflate filter */</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_DEFLATE</span> <span class="hl com">/* Verify deflate filter is registered currently */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Zfilter_avail</span><span class="hl opt">(</span>H5Z_FILTER_DEFLATE<span class="hl opt">) !=</span> TRUE<span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Deflate filter not available</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Push API context */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5CX_push</span><span class="hl opt">() <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> api_ctx_pushed <span class="hl opt">=</span> TRUE<span class="hl opt">;</span> <span class="hl com">/* Unregister deflate filter */</span> <span class="hl com">/* (Use private routine, to avoid range checking on filter ID) */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Z__unregister</span><span class="hl opt">(</span>H5Z_FILTER_DEFLATE<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't unregister deflate filter</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_DEFLATE */</span><span class="hl ppc"></span> <span class="hl com">/* Verify deflate filter is not registered currently */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Zfilter_avail</span><span class="hl opt">(</span>H5Z_FILTER_DEFLATE<span class="hl opt">) !=</span> FALSE<span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Deflate filter available</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Create dcpl with deflate filter */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't create dcpl</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_dims<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't set chunk sizes</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_deflate</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">9</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't set deflate filter</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Check if all the filters are available */</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Pall_filters_avail</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt"><</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't check filter availability</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">!=</span> FALSE<span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Filter shouldn't be available</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Create the data space */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't open dataspace</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Create new dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_MISSING_NAME<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't create dataset</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Write data */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> points_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Error writing dataset data</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Flush the file (to clear the cache) */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fflush</span><span class="hl opt">(</span>file<span class="hl opt">,</span> H5F_SCOPE_GLOBAL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Error flushing file</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Query the dataset's size on disk */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">== (</span>dset_size <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dsid<span class="hl opt">))) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Error querying dataset size, dset_size=%lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">,</span> <span class="hl opt">(</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>dset_size<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Verify that the size indicates data is uncompressed */</span> <span class="hl com">/* (i.e. the deflation filter we asked for was silently ignored) */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span><span class="hl kwd">H5Tget_size</span><span class="hl opt">(</span>H5T_NATIVE_INT<span class="hl opt">) *</span> DSET_DIM1 <span class="hl opt">*</span> DSET_DIM2<span class="hl opt">) !=</span> dset_size<span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Incorrect dataset size: %lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>dset_size<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Read data */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> check_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Error reading dataset data</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Compare data */</span> <span class="hl com">/* Check that the values read are the same as the values written */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>points<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] !=</span> check<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %lu,%lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)(</span>i<span class="hl opt">), (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)(</span>j<span class="hl opt">));</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At original: %d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> points<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At returned: %d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> check<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/* Close dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't close dataset</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Close dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't close dataspace</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Close dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't close dcpl</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Try reading existing dataset with deflate filter */</span> <span class="hl com">/* Open existing file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fopen</span><span class="hl opt">(</span>testfile<span class="hl opt">,</span> H5F_ACC_RDONLY<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't open existing deflated file</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Open dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"Dataset1"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't open dataset</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Read data (should fail, since deflate filter is missing) */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> check_data<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Should not be able to read dataset data</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Close dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't close dataset</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Close existing file */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't close file</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Re-register the deflate filter */</span> <span class="hl com">/* Verify deflate filter is not registered currently */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Zfilter_avail</span><span class="hl opt">(</span>H5Z_FILTER_DEFLATE<span class="hl opt">) !=</span> FALSE<span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Deflate filter available</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_DEFLATE</span> <span class="hl com">/* Register deflate filter (use internal function to avoid range checks) */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Z_register</span><span class="hl opt">(</span>H5Z_DEFLATE<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't unregister deflate filter</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Verify deflate filter is registered currently */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Zfilter_avail</span><span class="hl opt">(</span>H5Z_FILTER_DEFLATE<span class="hl opt">) !=</span> TRUE<span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Deflate filter not available</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_DEFLATE */</span><span class="hl ppc"></span> <span class="hl com">/* Pop API context */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>api_ctx_pushed <span class="hl opt">&&</span> <span class="hl kwd">H5CX_pop</span><span class="hl opt">(</span>FALSE<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> api_ctx_pushed <span class="hl opt">=</span> FALSE<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>api_ctx_pushed<span class="hl opt">)</span> <span class="hl kwd">H5CX_pop</span><span class="hl opt">(</span>FALSE<span class="hl opt">);</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_missing_filter() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_onebyte_shuffle</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests the 8-bit array with shuffling algorithm.</span> <span class="hl com"> * The shuffled array should be the same result as</span> <span class="hl com"> * that before the shuffling.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_onebyte_shuffle</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t dataset<span class="hl opt">,</span> space<span class="hl opt">,</span> dc<span class="hl opt">;</span> <span class="hl kwb">const</span> hsize_t size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">10</span><span class="hl opt">,</span> <span class="hl num">20</span><span class="hl opt">};</span> <span class="hl kwb">const</span> hsize_t chunk_size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">10</span><span class="hl opt">,</span> <span class="hl num">20</span><span class="hl opt">};</span> <span class="hl kwb">unsigned char</span> orig_data<span class="hl opt">[</span><span class="hl num">10</span><span class="hl opt">][</span><span class="hl num">20</span><span class="hl opt">];</span> <span class="hl kwb">unsigned char</span> new_data<span class="hl opt">[</span><span class="hl num">10</span><span class="hl opt">][</span><span class="hl num">20</span><span class="hl opt">];</span> <span class="hl kwb">size_t</span> i<span class="hl opt">,</span> j<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"8-bit shuffling (setup)"</span><span class="hl opt">);</span> <span class="hl com">/* Create the data space */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> size<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Use shuffling algorithm with 8-bit */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dc <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_shuffle</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_ONEBYTE_SHUF_NAME<span class="hl opt">,</span> H5T_NATIVE_UCHAR<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dc<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl num">10</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> <span class="hl num">20</span><span class="hl opt">;</span> j<span class="hl opt">++)</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] = (</span><span class="hl kwb">unsigned char</span><span class="hl opt">)</span><span class="hl kwd">HDrandom</span><span class="hl opt">();</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 1: Test shuffling by setting up a chunked dataset and writing</span> <span class="hl com"> * to it.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"8-bit shuffling (write)"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_UCHAR<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> orig_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 2: Try to read the data we just wrote.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"8-bit shuffling (read)"</span><span class="hl opt">);</span> <span class="hl com">/* Read the dataset back */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_UCHAR<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> new_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Check that the values read are the same as the values written */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>new_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] !=</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %lu,%lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>i<span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>j<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * Cleanup</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_onebyte_shuffle() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_nbit_int</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests the integer datatype for nbit filter</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_nbit_int</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t dataset<span class="hl opt">,</span> datatype<span class="hl opt">,</span> mem_datatype<span class="hl opt">,</span> space<span class="hl opt">,</span> dc<span class="hl opt">;</span> hsize_t size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">};</span> hsize_t chunk_size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">};</span> <span class="hl kwb">int</span> orig_data<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">];</span> <span class="hl kwb">int</span> new_data<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">];</span> <span class="hl kwb">unsigned int</span> mask<span class="hl opt">;</span> <span class="hl kwb">size_t</span> precision<span class="hl opt">,</span> offset<span class="hl opt">;</span> <span class="hl kwb">double</span> power<span class="hl opt">;</span> <span class="hl kwb">size_t</span> i<span class="hl opt">,</span> j<span class="hl opt">;</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">"Testing nbit filter"</span><span class="hl opt">);</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" nbit int (setup)"</span><span class="hl opt">);</span> <span class="hl com">/* Define dataset datatype (integer), and set precision, offset */</span> datatype <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_NATIVE_INT<span class="hl opt">);</span> precision <span class="hl opt">=</span> <span class="hl num">17</span><span class="hl opt">;</span> <span class="hl com">/* precision includes sign bit */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_precision</span><span class="hl opt">(</span>datatype<span class="hl opt">,</span> precision<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> offset <span class="hl opt">=</span> <span class="hl num">4</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_offset</span><span class="hl opt">(</span>datatype<span class="hl opt">,</span> offset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Copy to memory datatype before setting order */</span> mem_datatype <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>datatype<span class="hl opt">);</span> <span class="hl com">/* Set order of dataset datatype */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_order</span><span class="hl opt">(</span>datatype<span class="hl opt">,</span> H5T_ORDER_BE<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the data space */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> size<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Use nbit filter */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dc <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_nbit</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_NBIT_INT_NAME<span class="hl opt">,</span> datatype<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dc<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Initialize data, assuming size of long long >= size of int */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> power <span class="hl opt">=</span> <span class="hl kwd">HDpow</span><span class="hl opt">(</span><span class="hl num">2.0</span><span class="hl opt">, (</span><span class="hl kwb">double</span><span class="hl opt">)(</span>precision <span class="hl opt">-</span> <span class="hl num">1</span><span class="hl opt">));</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] = (</span><span class="hl kwb">int</span><span class="hl opt">)(((</span><span class="hl kwb">long long</span><span class="hl opt">)</span><span class="hl kwd">HDrandom</span><span class="hl opt">() % (</span><span class="hl kwb">long long</span><span class="hl opt">)</span>power<span class="hl opt">) <<</span> offset<span class="hl opt">);</span> <span class="hl com">/* even-numbered values are negative */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>i <span class="hl opt">*</span> size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] +</span> j <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">) %</span> <span class="hl num">2</span> <span class="hl opt">==</span> <span class="hl num">0</span><span class="hl opt">)</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] = -</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">];</span> <span class="hl opt">}</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 1: Test nbit by setting up a chunked dataset and writing</span> <span class="hl com"> * to it.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" nbit int (write)"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> mem_datatype<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> orig_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 2: Try to read the data we just wrote.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" nbit int (read)"</span><span class="hl opt">);</span> <span class="hl com">/* Read the dataset back */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> mem_datatype<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> new_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Check that the values read are the same as the values written</span> <span class="hl com"> * Use mask for checking the significant bits, ignoring the padding bits</span> <span class="hl com"> */</span> mask <span class="hl opt">= ~((</span><span class="hl kwb">unsigned</span><span class="hl opt">)~</span><span class="hl num">0</span> <span class="hl opt"><< (</span>precision <span class="hl opt">+</span> offset<span class="hl opt">)) & ((</span><span class="hl kwb">unsigned</span><span class="hl opt">)~</span><span class="hl num">0</span> <span class="hl opt"><<</span> offset<span class="hl opt">);</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">(((</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>new_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] &</span> mask<span class="hl opt">) != ((</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] &</span> mask<span class="hl opt">)) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %lu,%lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>i<span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>j<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * Cleanup</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>datatype<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>mem_datatype<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_nbit_int() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_nbit_float</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests the float datatype of nbit filter</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_nbit_float</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t dataset<span class="hl opt">,</span> datatype<span class="hl opt">,</span> space<span class="hl opt">,</span> dc<span class="hl opt">;</span> <span class="hl kwb">const</span> hsize_t size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">};</span> <span class="hl kwb">const</span> hsize_t chunk_size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">};</span> <span class="hl com">/* orig_data[] are initialized to be within the range that can be represented by</span> <span class="hl com"> * dataset datatype (no precision loss during datatype conversion)</span> <span class="hl com"> */</span> <span class="hl kwb">float</span> orig_data<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">] = {{</span><span class="hl num">188384.0</span>F<span class="hl opt">,</span> <span class="hl num">19.103516</span>F<span class="hl opt">, -</span><span class="hl num">1.0831790</span>e9F<span class="hl opt">, -</span><span class="hl num">84.242188</span>F<span class="hl opt">,</span> <span class="hl num">5.2045898</span>F<span class="hl opt">},</span> <span class="hl opt">{-</span><span class="hl num">49140.0</span>F<span class="hl opt">,</span> <span class="hl num">2350.25</span>F<span class="hl opt">, -</span><span class="hl num">3.2110596e-1</span>F<span class="hl opt">,</span> <span class="hl num">6.4998865e-5</span>F<span class="hl opt">, -</span><span class="hl num">0.0</span>F<span class="hl opt">}};</span> <span class="hl kwb">float</span> new_data<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">];</span> <span class="hl kwb">size_t</span> precision<span class="hl opt">,</span> offset<span class="hl opt">;</span> <span class="hl kwb">size_t</span> i<span class="hl opt">,</span> j<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" nbit float (setup)"</span><span class="hl opt">);</span> <span class="hl com">/* Define user-defined single-precision floating-point type for dataset */</span> datatype <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_IEEE_F32BE<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_fields</span><span class="hl opt">(</span>datatype<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">26</span><span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">20</span><span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">6</span><span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">7</span><span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">13</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> offset <span class="hl opt">=</span> <span class="hl num">7</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_offset</span><span class="hl opt">(</span>datatype<span class="hl opt">,</span> offset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> precision <span class="hl opt">=</span> <span class="hl num">20</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_precision</span><span class="hl opt">(</span>datatype<span class="hl opt">,</span> precision<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_size</span><span class="hl opt">(</span>datatype<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">4</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_ebias</span><span class="hl opt">(</span>datatype<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">31</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create the data space */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> size<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Use nbit filter */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dc <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_nbit</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_NBIT_FLOAT_NAME<span class="hl opt">,</span> datatype<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dc<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 1: Test nbit by setting up a chunked dataset and writing</span> <span class="hl com"> * to it.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" nbit float (write)"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_FLOAT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> orig_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 2: Try to read the data we just wrote.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" nbit float (read)"</span><span class="hl opt">);</span> <span class="hl com">/* Read the dataset back */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_FLOAT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> new_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Check that the values read are the same as the values written</span> <span class="hl com"> * Assume size of int = size of float</span> <span class="hl com"> */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">HDisnan</span><span class="hl opt">(</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]))</span> <span class="hl kwa">continue</span><span class="hl opt">;</span> <span class="hl com">/* skip if value is NaN */</span> <span class="hl kwa">if</span> <span class="hl opt">(!</span><span class="hl kwd">H5_FLT_ABS_EQUAL</span><span class="hl opt">(</span>new_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">],</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">])) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %lu,%lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>i<span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>j<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * Cleanup</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>datatype<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_nbit_float() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_nbit_double</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests the double datatype of nbit filter</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_nbit_double</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl com">/* assume unsigned int and float has the same number of bytes */</span> hid_t dataset<span class="hl opt">,</span> datatype<span class="hl opt">,</span> space<span class="hl opt">,</span> dc<span class="hl opt">;</span> <span class="hl kwb">const</span> hsize_t size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">};</span> <span class="hl kwb">const</span> hsize_t chunk_size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">};</span> <span class="hl com">/* orig_data[] are initialized to be within the range that can be represented by</span> <span class="hl com"> * dataset datatype (no precision loss during datatype conversion)</span> <span class="hl com"> */</span> <span class="hl kwb">double</span> orig_data<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">] = {{(</span><span class="hl kwb">double</span><span class="hl opt">)</span><span class="hl num">1.6081706885101836e+60L</span><span class="hl opt">, -</span><span class="hl num">255.32099170994480</span><span class="hl opt">,</span> <span class="hl opt">(</span><span class="hl kwb">double</span><span class="hl opt">)</span><span class="hl num">1.2677579992621376e-61L</span><span class="hl opt">,</span> <span class="hl num">64568.289448797700</span><span class="hl opt">,</span> <span class="hl opt">(</span><span class="hl kwb">double</span><span class="hl opt">)-</span><span class="hl num">1.0619721778839084e-75L</span><span class="hl opt">},</span> <span class="hl opt">{(</span><span class="hl kwb">double</span><span class="hl opt">)</span><span class="hl num">2.1499497833454840e+56L</span><span class="hl opt">,</span> <span class="hl num">6.6562295504670740e-3</span><span class="hl opt">, -</span><span class="hl num">1.5747263393432150</span><span class="hl opt">,</span> <span class="hl num">1.0711093225222612</span><span class="hl opt">, -</span><span class="hl num">9.8971679387636870e-1</span><span class="hl opt">}};</span> <span class="hl kwb">double</span> new_data<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">];</span> <span class="hl kwb">size_t</span> precision<span class="hl opt">,</span> offset<span class="hl opt">;</span> <span class="hl kwb">size_t</span> i<span class="hl opt">,</span> j<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" nbit double (setup)"</span><span class="hl opt">);</span> <span class="hl com">/* Define user-defined doule-precision floating-point type for dataset */</span> datatype <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_IEEE_F64BE<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_fields</span><span class="hl opt">(</span>datatype<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">55</span><span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">46</span><span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">9</span><span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">5</span><span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">41</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> offset <span class="hl opt">=</span> <span class="hl num">5</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_offset</span><span class="hl opt">(</span>datatype<span class="hl opt">,</span> offset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> precision <span class="hl opt">=</span> <span class="hl num">51</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_precision</span><span class="hl opt">(</span>datatype<span class="hl opt">,</span> precision<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_size</span><span class="hl opt">(</span>datatype<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">8</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_ebias</span><span class="hl opt">(</span>datatype<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">255</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create the data space */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> size<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Use nbit filter */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dc <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_nbit</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_NBIT_DOUBLE_NAME<span class="hl opt">,</span> datatype<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dc<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 1: Test nbit by setting up a chunked dataset and writing</span> <span class="hl com"> * to it.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" nbit double (write)"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_DOUBLE<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> orig_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 2: Try to read the data we just wrote.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" nbit double (read)"</span><span class="hl opt">);</span> <span class="hl com">/* Read the dataset back */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_DOUBLE<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> new_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Check that the values read are the same as the values written</span> <span class="hl com"> * Assume size of long long = size of double</span> <span class="hl com"> */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">HDisnan</span><span class="hl opt">(</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]))</span> <span class="hl kwa">continue</span><span class="hl opt">;</span> <span class="hl com">/* skip if value is NaN */</span> <span class="hl kwa">if</span> <span class="hl opt">(!</span><span class="hl kwd">H5_DBL_ABS_EQUAL</span><span class="hl opt">(</span>new_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">],</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">])) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %lu,%lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>i<span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>j<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * Cleanup</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>datatype<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_nbit_double() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_nbit_array</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests the simple version array datatype for nbit filter</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_nbit_array</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t dataset<span class="hl opt">,</span> base_datatype<span class="hl opt">,</span> array_datatype<span class="hl opt">,</span> space<span class="hl opt">,</span> dc<span class="hl opt">;</span> hid_t mem_base_datatype<span class="hl opt">,</span> mem_array_datatype<span class="hl opt">;</span> <span class="hl kwb">const</span> hsize_t size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">};</span> <span class="hl kwb">const</span> hsize_t adims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">3</span><span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">};</span> <span class="hl kwb">const</span> hsize_t chunk_size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">};</span> <span class="hl kwb">unsigned int</span> orig_data<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">][</span><span class="hl num">3</span><span class="hl opt">][</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl kwb">unsigned int</span> new_data<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">][</span><span class="hl num">3</span><span class="hl opt">][</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl kwb">size_t</span> precision<span class="hl opt">,</span> offset<span class="hl opt">;</span> <span class="hl kwb">double</span> power<span class="hl opt">;</span> <span class="hl kwb">size_t</span> i<span class="hl opt">,</span> j<span class="hl opt">,</span> m<span class="hl opt">,</span> n<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" nbit array (setup)"</span><span class="hl opt">);</span> <span class="hl com">/* Define dataset array datatype's base datatype and set precision, offset */</span> base_datatype <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_NATIVE_UINT<span class="hl opt">);</span> precision <span class="hl opt">=</span> <span class="hl num">22</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_precision</span><span class="hl opt">(</span>base_datatype<span class="hl opt">,</span> precision<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> offset <span class="hl opt">=</span> <span class="hl num">7</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_offset</span><span class="hl opt">(</span>base_datatype<span class="hl opt">,</span> offset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Copy to memory array datatype's base datatype before setting order */</span> mem_base_datatype <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>base_datatype<span class="hl opt">);</span> <span class="hl com">/* Set order of dataset array datatype's base datatype */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_order</span><span class="hl opt">(</span>base_datatype<span class="hl opt">,</span> H5T_ORDER_BE<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create dataset array datatype */</span> array_datatype <span class="hl opt">=</span> <span class="hl kwd">H5Tarray_create2</span><span class="hl opt">(</span>base_datatype<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> adims<span class="hl opt">);</span> <span class="hl com">/* Create memory array datatype */</span> mem_array_datatype <span class="hl opt">=</span> <span class="hl kwd">H5Tarray_create2</span><span class="hl opt">(</span>mem_base_datatype<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> adims<span class="hl opt">);</span> <span class="hl com">/* Create the data space */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> size<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Use nbit filter */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dc <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_nbit</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_NBIT_ARRAY_NAME<span class="hl opt">,</span> array_datatype<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dc<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Initialize data, assuming size of long long >= size of unsigned int */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>m <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> m <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>adims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> m<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>n <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> n <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>adims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> n<span class="hl opt">++) {</span> power <span class="hl opt">=</span> <span class="hl kwd">HDpow</span><span class="hl opt">(</span><span class="hl num">2.0</span><span class="hl opt">, (</span><span class="hl kwb">double</span><span class="hl opt">)</span>precision<span class="hl opt">);</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">][</span>m<span class="hl opt">][</span>n<span class="hl opt">] =</span> <span class="hl opt">(</span><span class="hl kwb">unsigned int</span><span class="hl opt">)(((</span><span class="hl kwb">long long</span><span class="hl opt">)</span><span class="hl kwd">HDrandom</span><span class="hl opt">() % (</span><span class="hl kwb">long long</span><span class="hl opt">)</span>power<span class="hl opt">) <<</span> offset<span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 1: Test nbit by setting up a chunked dataset and writing</span> <span class="hl com"> * to it.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" nbit array (write)"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> mem_array_datatype<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> orig_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 2: Try to read the data we just wrote.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" nbit array (read)"</span><span class="hl opt">);</span> <span class="hl com">/* Read the dataset back */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> mem_array_datatype<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> new_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Check that the values read are the same as the values written</span> <span class="hl com"> */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>m <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> m <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>adims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> m<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>n <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> n <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>adims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> n<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>new_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">][</span>m<span class="hl opt">][</span>n<span class="hl opt">] !=</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">][</span>m<span class="hl opt">][</span>n<span class="hl opt">]) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %lu,%lu,%lu,%lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>i<span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>j<span class="hl opt">,</span> <span class="hl opt">(</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>m<span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>n<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * Cleanup</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>array_datatype<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>base_datatype<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>mem_array_datatype<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>mem_base_datatype<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_nbit_array() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_nbit_compound</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests a simple version of compound datatype of nbit filter</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> *</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Xiaowen Wu</span> <span class="hl com"> * Tuesday, Jan. 18th, 2005</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_nbit_compound</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwc">typedef</span> <span class="hl kwb">struct</span> <span class="hl opt">{</span> <span class="hl com">/* Struct with atomic fields */</span> <span class="hl kwb">int</span> i<span class="hl opt">;</span> <span class="hl kwb">char</span> c<span class="hl opt">;</span> <span class="hl kwb">short</span> s<span class="hl opt">;</span> <span class="hl kwb">float</span> f<span class="hl opt">;</span> <span class="hl opt">}</span> atomic<span class="hl opt">;</span> hid_t i_tid<span class="hl opt">,</span> c_tid<span class="hl opt">,</span> s_tid<span class="hl opt">,</span> f_tid<span class="hl opt">;</span> hid_t cmpd_tid<span class="hl opt">;</span> <span class="hl com">/* atomic compound datatype */</span> hid_t mem_cmpd_tid<span class="hl opt">;</span> <span class="hl com">/* memory atomic compound datatype */</span> <span class="hl kwb">size_t</span> precision<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">] = {</span><span class="hl num">15</span><span class="hl opt">,</span> <span class="hl num">7</span><span class="hl opt">,</span> <span class="hl num">10</span><span class="hl opt">};</span> <span class="hl kwb">size_t</span> offset<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">] = {</span><span class="hl num">9</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">3</span><span class="hl opt">};</span> hid_t dataset<span class="hl opt">,</span> space<span class="hl opt">,</span> dc<span class="hl opt">;</span> <span class="hl kwb">const</span> hsize_t size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">};</span> <span class="hl kwb">const</span> hsize_t chunk_size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">};</span> <span class="hl kwb">const float</span> float_val<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">] = {{</span><span class="hl num">188384.0</span>F<span class="hl opt">,</span> <span class="hl num">19.103516</span>F<span class="hl opt">, -</span><span class="hl num">1.0831790</span>e9F<span class="hl opt">, -</span><span class="hl num">84.242188</span>F<span class="hl opt">,</span> <span class="hl num">5.2045898</span>F<span class="hl opt">},</span> <span class="hl opt">{-</span><span class="hl num">49140.0</span>F<span class="hl opt">,</span> <span class="hl num">2350.25</span>F<span class="hl opt">, -</span><span class="hl num">3.2110596e-1</span>F<span class="hl opt">,</span> <span class="hl num">6.4998865e-5</span>F<span class="hl opt">, -</span><span class="hl num">0.0</span>F<span class="hl opt">}};</span> atomic orig_data<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">];</span> atomic new_data<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">];</span> <span class="hl kwb">unsigned int</span> i_mask<span class="hl opt">,</span> s_mask<span class="hl opt">,</span> c_mask<span class="hl opt">;</span> <span class="hl kwb">double</span> power<span class="hl opt">;</span> <span class="hl kwb">size_t</span> i<span class="hl opt">,</span> j<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" nbit compound (setup)"</span><span class="hl opt">);</span> <span class="hl com">/* Define datatypes of members of compound datatype */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>i_tid <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_NATIVE_INT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>c_tid <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_NATIVE_CHAR<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>s_tid <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_NATIVE_SHORT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>f_tid <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_IEEE_F32BE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set precision and offset etc. */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_precision</span><span class="hl opt">(</span>i_tid<span class="hl opt">,</span> precision<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_offset</span><span class="hl opt">(</span>i_tid<span class="hl opt">,</span> offset<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_precision</span><span class="hl opt">(</span>c_tid<span class="hl opt">,</span> precision<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_offset</span><span class="hl opt">(</span>c_tid<span class="hl opt">,</span> offset<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_precision</span><span class="hl opt">(</span>s_tid<span class="hl opt">,</span> precision<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">]) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_offset</span><span class="hl opt">(</span>s_tid<span class="hl opt">,</span> offset<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">]) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_fields</span><span class="hl opt">(</span>f_tid<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">26</span><span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">20</span><span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">6</span><span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">7</span><span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">13</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_offset</span><span class="hl opt">(</span>f_tid<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">7</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_precision</span><span class="hl opt">(</span>f_tid<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">20</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_size</span><span class="hl opt">(</span>f_tid<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">4</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_ebias</span><span class="hl opt">(</span>f_tid<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">31</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create a memory compound datatype before setting the order */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>mem_cmpd_tid <span class="hl opt">=</span> <span class="hl kwd">H5Tcreate</span><span class="hl opt">(</span>H5T_COMPOUND<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>atomic<span class="hl opt">))) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>mem_cmpd_tid<span class="hl opt">,</span> <span class="hl str">"i"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>atomic<span class="hl opt">,</span> i<span class="hl opt">),</span> i_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>mem_cmpd_tid<span class="hl opt">,</span> <span class="hl str">"c"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>atomic<span class="hl opt">,</span> c<span class="hl opt">),</span> c_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>mem_cmpd_tid<span class="hl opt">,</span> <span class="hl str">"s"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>atomic<span class="hl opt">,</span> s<span class="hl opt">),</span> s_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>mem_cmpd_tid<span class="hl opt">,</span> <span class="hl str">"f"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>atomic<span class="hl opt">,</span> f<span class="hl opt">),</span> H5T_NATIVE_FLOAT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create a dataset compound datatype and insert some atomic types */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>cmpd_tid <span class="hl opt">=</span> <span class="hl kwd">H5Tcreate</span><span class="hl opt">(</span>H5T_COMPOUND<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>atomic<span class="hl opt">))) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>cmpd_tid<span class="hl opt">,</span> <span class="hl str">"i"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>atomic<span class="hl opt">,</span> i<span class="hl opt">),</span> i_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>cmpd_tid<span class="hl opt">,</span> <span class="hl str">"c"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>atomic<span class="hl opt">,</span> c<span class="hl opt">),</span> c_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>cmpd_tid<span class="hl opt">,</span> <span class="hl str">"s"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>atomic<span class="hl opt">,</span> s<span class="hl opt">),</span> s_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>cmpd_tid<span class="hl opt">,</span> <span class="hl str">"f"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>atomic<span class="hl opt">,</span> f<span class="hl opt">),</span> f_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set order of dataset compound datatype */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_order</span><span class="hl opt">(</span>cmpd_tid<span class="hl opt">,</span> H5T_ORDER_BE<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create the data space */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> size<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Use nbit filter */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dc <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_nbit</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_NBIT_COMPOUND_NAME<span class="hl opt">,</span> cmpd_tid<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dc<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize data, assuming size of long long >= size of member datatypes */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> power <span class="hl opt">=</span> <span class="hl kwd">HDpow</span><span class="hl opt">(</span><span class="hl num">2.0</span><span class="hl opt">, (</span><span class="hl kwb">double</span><span class="hl opt">)(</span>precision<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] -</span> <span class="hl num">1</span><span class="hl opt">));</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>i <span class="hl opt">= (</span><span class="hl kwb">int</span><span class="hl opt">)(((</span><span class="hl kwb">long long</span><span class="hl opt">)</span><span class="hl kwd">HDrandom</span><span class="hl opt">() % (</span><span class="hl kwb">long long</span><span class="hl opt">)</span>power<span class="hl opt">) <<</span> offset<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]);</span> power <span class="hl opt">=</span> <span class="hl kwd">HDpow</span><span class="hl opt">(</span><span class="hl num">2.0</span><span class="hl opt">, (</span><span class="hl kwb">double</span><span class="hl opt">)(</span>precision<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] -</span> <span class="hl num">1</span><span class="hl opt">));</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>c <span class="hl opt">= (</span><span class="hl kwb">char</span><span class="hl opt">)(((</span><span class="hl kwb">long long</span><span class="hl opt">)</span><span class="hl kwd">HDrandom</span><span class="hl opt">() % (</span><span class="hl kwb">long long</span><span class="hl opt">)</span>power<span class="hl opt">) <<</span> offset<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]);</span> power <span class="hl opt">=</span> <span class="hl kwd">HDpow</span><span class="hl opt">(</span><span class="hl num">2.0</span><span class="hl opt">, (</span><span class="hl kwb">double</span><span class="hl opt">)(</span>precision<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] -</span> <span class="hl num">1</span><span class="hl opt">));</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>s <span class="hl opt">= (</span><span class="hl kwb">short</span><span class="hl opt">)(((</span><span class="hl kwb">long long</span><span class="hl opt">)</span><span class="hl kwd">HDrandom</span><span class="hl opt">() % (</span><span class="hl kwb">long long</span><span class="hl opt">)</span>power<span class="hl opt">) <<</span> offset<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">]);</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>f <span class="hl opt">=</span> float_val<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">];</span> <span class="hl com">/* some even-numbered integer values are negative */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>i <span class="hl opt">*</span> size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] +</span> j <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">) %</span> <span class="hl num">2</span> <span class="hl opt">==</span> <span class="hl num">0</span><span class="hl opt">) {</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>i <span class="hl opt">= -</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>i<span class="hl opt">;</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>s <span class="hl opt">= (</span><span class="hl kwb">short</span><span class="hl opt">)-</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>s<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 1: Test nbit by setting up a chunked dataset and writing</span> <span class="hl com"> * to it.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" nbit compound (write)"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> mem_cmpd_tid<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> orig_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 2: Try to read the data we just wrote.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" nbit compound (read)"</span><span class="hl opt">);</span> <span class="hl com">/* Read the dataset back */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> mem_cmpd_tid<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> new_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Check that the values read are the same as the values written</span> <span class="hl com"> * Use mask for checking the significant bits, ignoring the padding bits</span> <span class="hl com"> */</span> i_mask <span class="hl opt">= ~((</span><span class="hl kwb">unsigned</span><span class="hl opt">)~</span><span class="hl num">0</span> <span class="hl opt"><< (</span>precision<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] +</span> offset<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">])) & ((</span><span class="hl kwb">unsigned</span><span class="hl opt">)~</span><span class="hl num">0</span> <span class="hl opt"><<</span> offset<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]);</span> c_mask <span class="hl opt">= ~((</span><span class="hl kwb">unsigned</span><span class="hl opt">)~</span><span class="hl num">0</span> <span class="hl opt"><< (</span>precision<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] +</span> offset<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">])) & ((</span><span class="hl kwb">unsigned</span><span class="hl opt">)~</span><span class="hl num">0</span> <span class="hl opt"><<</span> offset<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]);</span> s_mask <span class="hl opt">= ~((</span><span class="hl kwb">unsigned</span><span class="hl opt">)~</span><span class="hl num">0</span> <span class="hl opt"><< (</span>precision<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] +</span> offset<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">])) & ((</span><span class="hl kwb">unsigned</span><span class="hl opt">)~</span><span class="hl num">0</span> <span class="hl opt"><<</span> offset<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">]);</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">(((</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>new_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>i <span class="hl opt">&</span> i_mask<span class="hl opt">) != ((</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>i <span class="hl opt">&</span> i_mask<span class="hl opt">) ||</span> <span class="hl opt">((</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>new_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>c <span class="hl opt">&</span> c_mask<span class="hl opt">) != ((</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>c <span class="hl opt">&</span> c_mask<span class="hl opt">) ||</span> <span class="hl opt">((</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>new_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>s <span class="hl opt">&</span> s_mask<span class="hl opt">) != ((</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>s <span class="hl opt">&</span> s_mask<span class="hl opt">) ||</span> <span class="hl opt">(!</span><span class="hl kwd">HDisnan</span><span class="hl opt">(</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>f<span class="hl opt">) && !</span><span class="hl kwd">H5_FLT_ABS_EQUAL</span><span class="hl opt">(</span>new_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>f<span class="hl opt">,</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>f<span class="hl opt">))) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %lu,%lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>i<span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>j<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * Cleanup</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>i_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>c_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>s_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>f_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>cmpd_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>mem_cmpd_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_nbit_compound() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_nbit_compound_2</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests a complex version of compound datatype of nbit filter</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> *</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Xiaowen Wu</span> <span class="hl com"> * Tuesday, Jan. 18th, 2005</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_nbit_compound_2</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwc">typedef</span> <span class="hl kwb">struct</span> <span class="hl opt">{</span> <span class="hl com">/* Struct with atomic fields */</span> <span class="hl kwb">int</span> i<span class="hl opt">;</span> <span class="hl kwb">char</span> c<span class="hl opt">;</span> <span class="hl kwb">short</span> s<span class="hl opt">;</span> <span class="hl kwb">float</span> f<span class="hl opt">;</span> <span class="hl opt">}</span> atomic<span class="hl opt">;</span> <span class="hl kwc">typedef</span> <span class="hl kwb">struct</span> <span class="hl opt">{</span> <span class="hl com">/* Struct with complex fields */</span> atomic a<span class="hl opt">;</span> <span class="hl kwb">unsigned int</span> v<span class="hl opt">;</span> <span class="hl kwb">char</span> b<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">2</span><span class="hl opt">];</span> atomic d<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl opt">}</span> <span class="hl kwb">complex</span><span class="hl opt">;</span> hid_t i_tid<span class="hl opt">,</span> c_tid<span class="hl opt">,</span> s_tid<span class="hl opt">,</span> f_tid<span class="hl opt">,</span> v_tid<span class="hl opt">;</span> hid_t cmpd_tid1<span class="hl opt">;</span> <span class="hl com">/* atomic compound datatype */</span> hid_t cmpd_tid2<span class="hl opt">;</span> <span class="hl com">/* complex compound datatype */</span> hid_t mem_cmpd_tid1<span class="hl opt">;</span> <span class="hl com">/* memory atomic compound datatype */</span> hid_t mem_cmpd_tid2<span class="hl opt">;</span> <span class="hl com">/* memory complex compound datatype */</span> hid_t base_tid<span class="hl opt">;</span> <span class="hl com">/* simple array datatype's base datatype */</span> hid_t array_tid<span class="hl opt">;</span> <span class="hl com">/* simple array datatype */</span> hid_t array_cmplx_tid<span class="hl opt">;</span> <span class="hl com">/* complex array datatype */</span> hid_t mem_array_cmplx_tid<span class="hl opt">;</span> <span class="hl com">/* memory complex array datatype */</span> <span class="hl kwb">const</span> hsize_t array_dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">};</span> <span class="hl kwb">size_t</span> precision<span class="hl opt">[</span><span class="hl num">5</span><span class="hl opt">] = {</span><span class="hl num">31</span><span class="hl opt">,</span> <span class="hl num">8</span><span class="hl opt">,</span> <span class="hl num">10</span><span class="hl opt">,</span> <span class="hl num">23</span><span class="hl opt">,</span> <span class="hl num">8</span><span class="hl opt">};</span> <span class="hl kwb">size_t</span> offset<span class="hl opt">[</span><span class="hl num">5</span><span class="hl opt">] = {</span><span class="hl num">1</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">3</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">};</span> hid_t dataset<span class="hl opt">,</span> space<span class="hl opt">,</span> dc<span class="hl opt">;</span> <span class="hl kwb">const</span> hsize_t size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">};</span> <span class="hl kwb">const</span> hsize_t chunk_size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">};</span> <span class="hl kwb">const float</span> float_val<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">] = {{</span><span class="hl num">188384.0</span>F<span class="hl opt">,</span> <span class="hl num">19.103516</span>F<span class="hl opt">, -</span><span class="hl num">1.0831790</span>e9F<span class="hl opt">, -</span><span class="hl num">84.242188</span>F<span class="hl opt">,</span> <span class="hl num">5.2045898</span>F<span class="hl opt">},</span> <span class="hl opt">{-</span><span class="hl num">49140.0</span>F<span class="hl opt">,</span> <span class="hl num">2350.25</span>F<span class="hl opt">, -</span><span class="hl num">3.2110596e-1</span>F<span class="hl opt">,</span> <span class="hl num">6.4998865e-5</span>F<span class="hl opt">, -</span><span class="hl num">0.0</span>F<span class="hl opt">}};</span> <span class="hl kwb">complex</span> orig_data<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">];</span> <span class="hl kwb">complex</span> new_data<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">];</span> <span class="hl kwb">unsigned int</span> i_mask<span class="hl opt">,</span> s_mask<span class="hl opt">,</span> c_mask<span class="hl opt">,</span> b_mask<span class="hl opt">;</span> <span class="hl kwb">double</span> power<span class="hl opt">;</span> <span class="hl kwb">size_t</span> i<span class="hl opt">,</span> j<span class="hl opt">,</span> m<span class="hl opt">,</span> n<span class="hl opt">,</span> b_failed<span class="hl opt">,</span> d_failed<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" nbit compound complex (setup)"</span><span class="hl opt">);</span> <span class="hl com">/* Define datatypes of members of compound datatype */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>i_tid <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_NATIVE_INT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>c_tid <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_NATIVE_CHAR<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>s_tid <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_NATIVE_SHORT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>v_tid <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_NATIVE_UINT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>f_tid <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_IEEE_F32BE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set precision and offset etc. of atomic compound datatype members */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_precision</span><span class="hl opt">(</span>i_tid<span class="hl opt">,</span> precision<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_offset</span><span class="hl opt">(</span>i_tid<span class="hl opt">,</span> offset<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_precision</span><span class="hl opt">(</span>c_tid<span class="hl opt">,</span> precision<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_offset</span><span class="hl opt">(</span>c_tid<span class="hl opt">,</span> offset<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_precision</span><span class="hl opt">(</span>s_tid<span class="hl opt">,</span> precision<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">]) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_offset</span><span class="hl opt">(</span>s_tid<span class="hl opt">,</span> offset<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">]) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_fields</span><span class="hl opt">(</span>f_tid<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">26</span><span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">20</span><span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">6</span><span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">7</span><span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">13</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_offset</span><span class="hl opt">(</span>f_tid<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">7</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_precision</span><span class="hl opt">(</span>f_tid<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">20</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_size</span><span class="hl opt">(</span>f_tid<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">4</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_ebias</span><span class="hl opt">(</span>f_tid<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">31</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create a memory atomic compound datatype before setting the order */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>mem_cmpd_tid1 <span class="hl opt">=</span> <span class="hl kwd">H5Tcreate</span><span class="hl opt">(</span>H5T_COMPOUND<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>atomic<span class="hl opt">))) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>mem_cmpd_tid1<span class="hl opt">,</span> <span class="hl str">"i"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>atomic<span class="hl opt">,</span> i<span class="hl opt">),</span> i_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>mem_cmpd_tid1<span class="hl opt">,</span> <span class="hl str">"c"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>atomic<span class="hl opt">,</span> c<span class="hl opt">),</span> c_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>mem_cmpd_tid1<span class="hl opt">,</span> <span class="hl str">"s"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>atomic<span class="hl opt">,</span> s<span class="hl opt">),</span> s_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>mem_cmpd_tid1<span class="hl opt">,</span> <span class="hl str">"f"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>atomic<span class="hl opt">,</span> f<span class="hl opt">),</span> H5T_NATIVE_FLOAT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create a dataset atomic compound datatype and insert some atomic types */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>cmpd_tid1 <span class="hl opt">=</span> <span class="hl kwd">H5Tcreate</span><span class="hl opt">(</span>H5T_COMPOUND<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>atomic<span class="hl opt">))) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>cmpd_tid1<span class="hl opt">,</span> <span class="hl str">"i"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>atomic<span class="hl opt">,</span> i<span class="hl opt">),</span> i_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>cmpd_tid1<span class="hl opt">,</span> <span class="hl str">"c"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>atomic<span class="hl opt">,</span> c<span class="hl opt">),</span> c_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>cmpd_tid1<span class="hl opt">,</span> <span class="hl str">"s"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>atomic<span class="hl opt">,</span> s<span class="hl opt">),</span> s_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>cmpd_tid1<span class="hl opt">,</span> <span class="hl str">"f"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>atomic<span class="hl opt">,</span> f<span class="hl opt">),</span> f_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set order of dataset compound datatype */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_order</span><span class="hl opt">(</span>cmpd_tid1<span class="hl opt">,</span> H5T_ORDER_BE<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set precision and offset of the other data member */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_precision</span><span class="hl opt">(</span>v_tid<span class="hl opt">,</span> precision<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">]) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_offset</span><span class="hl opt">(</span>v_tid<span class="hl opt">,</span> offset<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">]) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create the simple array datatype */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>base_tid <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_NATIVE_CHAR<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_precision</span><span class="hl opt">(</span>base_tid<span class="hl opt">,</span> precision<span class="hl opt">[</span><span class="hl num">4</span><span class="hl opt">]) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_offset</span><span class="hl opt">(</span>base_tid<span class="hl opt">,</span> offset<span class="hl opt">[</span><span class="hl num">4</span><span class="hl opt">]) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>array_tid <span class="hl opt">=</span> <span class="hl kwd">H5Tarray_create2</span><span class="hl opt">(</span>base_tid<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> array_dims<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create the complex memory and dataset array datatype */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>array_cmplx_tid <span class="hl opt">=</span> <span class="hl kwd">H5Tarray_create2</span><span class="hl opt">(</span>cmpd_tid1<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> array_dims<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>mem_array_cmplx_tid <span class="hl opt">=</span> <span class="hl kwd">H5Tarray_create2</span><span class="hl opt">(</span>mem_cmpd_tid1<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> array_dims<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create a memory complex compound datatype before setting the order */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>mem_cmpd_tid2 <span class="hl opt">=</span> <span class="hl kwd">H5Tcreate</span><span class="hl opt">(</span>H5T_COMPOUND<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">complex</span><span class="hl opt">))) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>mem_cmpd_tid2<span class="hl opt">,</span> <span class="hl str">"a"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span><span class="hl kwb">complex</span><span class="hl opt">,</span> a<span class="hl opt">),</span> mem_cmpd_tid1<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>mem_cmpd_tid2<span class="hl opt">,</span> <span class="hl str">"v"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span><span class="hl kwb">complex</span><span class="hl opt">,</span> v<span class="hl opt">),</span> v_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>mem_cmpd_tid2<span class="hl opt">,</span> <span class="hl str">"b"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span><span class="hl kwb">complex</span><span class="hl opt">,</span> b<span class="hl opt">),</span> array_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>mem_cmpd_tid2<span class="hl opt">,</span> <span class="hl str">"d"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span><span class="hl kwb">complex</span><span class="hl opt">,</span> d<span class="hl opt">),</span> mem_array_cmplx_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set order of dataset other complex compound member datatype */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_order</span><span class="hl opt">(</span>v_tid<span class="hl opt">,</span> H5T_ORDER_BE<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create a dataset complex compound datatype and insert members */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>cmpd_tid2 <span class="hl opt">=</span> <span class="hl kwd">H5Tcreate</span><span class="hl opt">(</span>H5T_COMPOUND<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">complex</span><span class="hl opt">))) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>cmpd_tid2<span class="hl opt">,</span> <span class="hl str">"a"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span><span class="hl kwb">complex</span><span class="hl opt">,</span> a<span class="hl opt">),</span> cmpd_tid1<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>cmpd_tid2<span class="hl opt">,</span> <span class="hl str">"v"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span><span class="hl kwb">complex</span><span class="hl opt">,</span> v<span class="hl opt">),</span> v_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>cmpd_tid2<span class="hl opt">,</span> <span class="hl str">"b"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span><span class="hl kwb">complex</span><span class="hl opt">,</span> b<span class="hl opt">),</span> array_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>cmpd_tid2<span class="hl opt">,</span> <span class="hl str">"d"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span><span class="hl kwb">complex</span><span class="hl opt">,</span> d<span class="hl opt">),</span> array_cmplx_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create the data space */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> size<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Use nbit filter */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dc <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_nbit</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_NBIT_COMPOUND_NAME_2<span class="hl opt">,</span> cmpd_tid2<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dc<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize data, assuming size of long long >= size of member datatypes */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> power <span class="hl opt">=</span> <span class="hl kwd">HDpow</span><span class="hl opt">(</span><span class="hl num">2.0</span><span class="hl opt">, (</span><span class="hl kwb">double</span><span class="hl opt">)(</span>precision<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] -</span> <span class="hl num">1</span><span class="hl opt">));</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>a<span class="hl opt">.</span>i <span class="hl opt">= (</span><span class="hl kwb">int</span><span class="hl opt">)(((</span><span class="hl kwb">long long</span><span class="hl opt">)</span><span class="hl kwd">HDrandom</span><span class="hl opt">() % (</span><span class="hl kwb">long long</span><span class="hl opt">)</span>power<span class="hl opt">) <<</span> offset<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]);</span> power <span class="hl opt">=</span> <span class="hl kwd">HDpow</span><span class="hl opt">(</span><span class="hl num">2.0</span><span class="hl opt">, (</span><span class="hl kwb">double</span><span class="hl opt">)(</span>precision<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] -</span> <span class="hl num">1</span><span class="hl opt">));</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>a<span class="hl opt">.</span>c <span class="hl opt">= (</span><span class="hl kwb">char</span><span class="hl opt">)(((</span><span class="hl kwb">long long</span><span class="hl opt">)</span><span class="hl kwd">HDrandom</span><span class="hl opt">() % (</span><span class="hl kwb">long long</span><span class="hl opt">)</span>power<span class="hl opt">) <<</span> offset<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]);</span> power <span class="hl opt">=</span> <span class="hl kwd">HDpow</span><span class="hl opt">(</span><span class="hl num">2.0</span><span class="hl opt">, (</span><span class="hl kwb">double</span><span class="hl opt">)(</span>precision<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] -</span> <span class="hl num">1</span><span class="hl opt">));</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>a<span class="hl opt">.</span>s <span class="hl opt">= (</span><span class="hl kwb">short</span><span class="hl opt">)(-(((</span><span class="hl kwb">long long</span><span class="hl opt">)</span><span class="hl kwd">HDrandom</span><span class="hl opt">() % (</span><span class="hl kwb">long long</span><span class="hl opt">)</span>power<span class="hl opt">) <<</span> offset<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">]));</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>a<span class="hl opt">.</span>f <span class="hl opt">=</span> float_val<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">];</span> power <span class="hl opt">=</span> <span class="hl kwd">HDpow</span><span class="hl opt">(</span><span class="hl num">2.0</span><span class="hl opt">, (</span><span class="hl kwb">double</span><span class="hl opt">)</span>precision<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">]);</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>v <span class="hl opt">= (</span><span class="hl kwb">unsigned int</span><span class="hl opt">)(((</span><span class="hl kwb">long long</span><span class="hl opt">)</span><span class="hl kwd">HDrandom</span><span class="hl opt">() % (</span><span class="hl kwb">long long</span><span class="hl opt">)</span>power<span class="hl opt">) <<</span> offset<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">]);</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>m <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> m <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>array_dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> m<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>n <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> n <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>array_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> n<span class="hl opt">++) {</span> power <span class="hl opt">=</span> <span class="hl kwd">HDpow</span><span class="hl opt">(</span><span class="hl num">2.0</span><span class="hl opt">, (</span><span class="hl kwb">double</span><span class="hl opt">)(</span>precision<span class="hl opt">[</span><span class="hl num">4</span><span class="hl opt">] -</span> <span class="hl num">1</span><span class="hl opt">));</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>b<span class="hl opt">[</span>m<span class="hl opt">][</span>n<span class="hl opt">] = (</span><span class="hl kwb">char</span><span class="hl opt">)(((</span><span class="hl kwb">long long</span><span class="hl opt">)</span><span class="hl kwd">HDrandom</span><span class="hl opt">() % (</span><span class="hl kwb">long long</span><span class="hl opt">)</span>power<span class="hl opt">) <<</span> offset<span class="hl opt">[</span><span class="hl num">4</span><span class="hl opt">]);</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>m <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> m <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>array_dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> m<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>n <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> n <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>array_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> n<span class="hl opt">++) {</span> power <span class="hl opt">=</span> <span class="hl kwd">HDpow</span><span class="hl opt">(</span><span class="hl num">2.0</span><span class="hl opt">, (</span><span class="hl kwb">double</span><span class="hl opt">)(</span>precision<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] -</span> <span class="hl num">1</span><span class="hl opt">));</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>d<span class="hl opt">[</span>m<span class="hl opt">][</span>n<span class="hl opt">].</span>i <span class="hl opt">=</span> <span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">)(-(((</span><span class="hl kwb">long long</span><span class="hl opt">)</span><span class="hl kwd">HDrandom</span><span class="hl opt">() % (</span><span class="hl kwb">long long</span><span class="hl opt">)</span>power<span class="hl opt">) <<</span> offset<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]));</span> power <span class="hl opt">=</span> <span class="hl kwd">HDpow</span><span class="hl opt">(</span><span class="hl num">2.0</span><span class="hl opt">, (</span><span class="hl kwb">double</span><span class="hl opt">)(</span>precision<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] -</span> <span class="hl num">1</span><span class="hl opt">));</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>d<span class="hl opt">[</span>m<span class="hl opt">][</span>n<span class="hl opt">].</span>c <span class="hl opt">=</span> <span class="hl opt">(</span><span class="hl kwb">char</span><span class="hl opt">)(((</span><span class="hl kwb">long long</span><span class="hl opt">)</span><span class="hl kwd">HDrandom</span><span class="hl opt">() % (</span><span class="hl kwb">long long</span><span class="hl opt">)</span>power<span class="hl opt">) <<</span> offset<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]);</span> power <span class="hl opt">=</span> <span class="hl kwd">HDpow</span><span class="hl opt">(</span><span class="hl num">2.0</span><span class="hl opt">, (</span><span class="hl kwb">double</span><span class="hl opt">)(</span>precision<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] -</span> <span class="hl num">1</span><span class="hl opt">));</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>d<span class="hl opt">[</span>m<span class="hl opt">][</span>n<span class="hl opt">].</span>s <span class="hl opt">=</span> <span class="hl opt">(</span><span class="hl kwb">short</span><span class="hl opt">)(((</span><span class="hl kwb">long long</span><span class="hl opt">)</span><span class="hl kwd">HDrandom</span><span class="hl opt">() % (</span><span class="hl kwb">long long</span><span class="hl opt">)</span>power<span class="hl opt">) <<</span> offset<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">]);</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>d<span class="hl opt">[</span>m<span class="hl opt">][</span>n<span class="hl opt">].</span>f <span class="hl opt">=</span> float_val<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">];</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 1: Test nbit by setting up a chunked dataset and writing</span> <span class="hl com"> * to it.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" nbit compound complex (write)"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> mem_cmpd_tid2<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> orig_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 2: Try to read the data we just wrote.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" nbit compound complex (read)"</span><span class="hl opt">);</span> <span class="hl com">/* Read the dataset back */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> mem_cmpd_tid2<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> new_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Check that the values read are the same as the values written</span> <span class="hl com"> * Use mask for checking the significant bits, ignoring the padding bits</span> <span class="hl com"> */</span> <span class="hl com">/* The original code</span> <span class="hl com"> * i_mask = ~((unsigned)~0 << (precision[0] + offset[0])) & ((unsigned)~0 << offset[0]);</span> <span class="hl com"> * left shift a 32-bit integer for 32-bit. The result is undefined by C language. A user</span> <span class="hl com"> * discovered it using clang compiler with -fcatch-undefined-behavior option (see Issue 7674</span> <span class="hl com"> * in Jira). So I changed it in a funny way as below to avoid it. SLU - 2011/8/11</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">unsigned</span><span class="hl opt">) ></span> <span class="hl num">4</span><span class="hl opt">)</span> i_mask <span class="hl opt">= ~((</span><span class="hl kwb">unsigned</span><span class="hl opt">)~</span><span class="hl num">0</span> <span class="hl opt"><< (</span>precision<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] +</span> offset<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">])) & ((</span><span class="hl kwb">unsigned</span><span class="hl opt">)~</span><span class="hl num">0</span> <span class="hl opt"><<</span> offset<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]);</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> i_mask <span class="hl opt">=</span> <span class="hl num">0xffffffff</span><span class="hl opt">;</span> i_mask <span class="hl opt">=</span> i_mask <span class="hl opt">& ((</span><span class="hl kwb">unsigned</span><span class="hl opt">)~</span><span class="hl num">0</span> <span class="hl opt"><<</span> offset<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]);</span> <span class="hl opt">}</span> c_mask <span class="hl opt">= ~((</span><span class="hl kwb">unsigned</span><span class="hl opt">)~</span><span class="hl num">0</span> <span class="hl opt"><< (</span>precision<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] +</span> offset<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">])) & ((</span><span class="hl kwb">unsigned</span><span class="hl opt">)~</span><span class="hl num">0</span> <span class="hl opt"><<</span> offset<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]);</span> s_mask <span class="hl opt">= ~((</span><span class="hl kwb">unsigned</span><span class="hl opt">)~</span><span class="hl num">0</span> <span class="hl opt"><< (</span>precision<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] +</span> offset<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">])) & ((</span><span class="hl kwb">unsigned</span><span class="hl opt">)~</span><span class="hl num">0</span> <span class="hl opt"><<</span> offset<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">]);</span> b_mask <span class="hl opt">= ~((</span><span class="hl kwb">unsigned</span><span class="hl opt">)~</span><span class="hl num">0</span> <span class="hl opt"><< (</span>precision<span class="hl opt">[</span><span class="hl num">4</span><span class="hl opt">] +</span> offset<span class="hl opt">[</span><span class="hl num">4</span><span class="hl opt">])) & ((</span><span class="hl kwb">unsigned</span><span class="hl opt">)~</span><span class="hl num">0</span> <span class="hl opt"><<</span> offset<span class="hl opt">[</span><span class="hl num">4</span><span class="hl opt">]);</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> b_failed <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> d_failed <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>m <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> m <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>array_dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> m<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>n <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> n <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>array_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> n<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(((</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>new_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>b<span class="hl opt">[</span>m<span class="hl opt">][</span>n<span class="hl opt">] &</span> b_mask<span class="hl opt">) !=</span> <span class="hl opt">((</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>b<span class="hl opt">[</span>m<span class="hl opt">][</span>n<span class="hl opt">] &</span> b_mask<span class="hl opt">)) {</span> b_failed <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">goto</span> out<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>m <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> m <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>array_dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> m<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>n <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> n <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>array_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> n<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(((</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>new_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>d<span class="hl opt">[</span>m<span class="hl opt">][</span>n<span class="hl opt">].</span>i <span class="hl opt">&</span> i_mask<span class="hl opt">) !=</span> <span class="hl opt">((</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>d<span class="hl opt">[</span>m<span class="hl opt">][</span>n<span class="hl opt">].</span>i <span class="hl opt">&</span> i_mask<span class="hl opt">) ||</span> <span class="hl opt">((</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>new_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>d<span class="hl opt">[</span>m<span class="hl opt">][</span>n<span class="hl opt">].</span>c <span class="hl opt">&</span> c_mask<span class="hl opt">) !=</span> <span class="hl opt">((</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>d<span class="hl opt">[</span>m<span class="hl opt">][</span>n<span class="hl opt">].</span>c <span class="hl opt">&</span> c_mask<span class="hl opt">) ||</span> <span class="hl opt">((</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>new_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>d<span class="hl opt">[</span>m<span class="hl opt">][</span>n<span class="hl opt">].</span>s <span class="hl opt">&</span> s_mask<span class="hl opt">) !=</span> <span class="hl opt">((</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>d<span class="hl opt">[</span>m<span class="hl opt">][</span>n<span class="hl opt">].</span>s <span class="hl opt">&</span> s_mask<span class="hl opt">) ||</span> <span class="hl opt">(!</span><span class="hl kwd">HDisnan</span><span class="hl opt">(</span>new_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>d<span class="hl opt">[</span>m<span class="hl opt">][</span>n<span class="hl opt">].</span>f<span class="hl opt">) &&</span> <span class="hl opt">!</span><span class="hl kwd">H5_FLT_ABS_EQUAL</span><span class="hl opt">(</span>new_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>d<span class="hl opt">[</span>m<span class="hl opt">][</span>n<span class="hl opt">].</span>f<span class="hl opt">,</span> new_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>d<span class="hl opt">[</span>m<span class="hl opt">][</span>n<span class="hl opt">].</span>f<span class="hl opt">))) {</span> d_failed <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">goto</span> out<span class="hl opt">;</span> <span class="hl opt">}</span> out<span class="hl opt">:</span> <span class="hl kwa">if</span> <span class="hl opt">(((</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>new_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>a<span class="hl opt">.</span>i <span class="hl opt">&</span> i_mask<span class="hl opt">) != ((</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>a<span class="hl opt">.</span>i <span class="hl opt">&</span> i_mask<span class="hl opt">) ||</span> <span class="hl opt">((</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>new_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>a<span class="hl opt">.</span>c <span class="hl opt">&</span> c_mask<span class="hl opt">) != ((</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>a<span class="hl opt">.</span>c <span class="hl opt">&</span> c_mask<span class="hl opt">) ||</span> <span class="hl opt">((</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>new_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>a<span class="hl opt">.</span>s <span class="hl opt">&</span> s_mask<span class="hl opt">) != ((</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>a<span class="hl opt">.</span>s <span class="hl opt">&</span> s_mask<span class="hl opt">) ||</span> <span class="hl opt">(!</span><span class="hl kwd">HDisnan</span><span class="hl opt">(</span>new_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>a<span class="hl opt">.</span>f<span class="hl opt">) && !</span><span class="hl kwd">H5_FLT_ABS_EQUAL</span><span class="hl opt">(</span>new_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>a<span class="hl opt">.</span>f<span class="hl opt">,</span> new_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>a<span class="hl opt">.</span>f<span class="hl opt">)) ||</span> new_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>v <span class="hl opt">!=</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">].</span>v <span class="hl opt">||</span> b_failed <span class="hl opt">||</span> d_failed<span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %lu,%lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>i<span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>j<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * Cleanup</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>i_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>c_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>s_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>f_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>v_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>cmpd_tid2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>cmpd_tid1<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>mem_cmpd_tid2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>mem_cmpd_tid1<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>array_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>base_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>array_cmplx_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>mem_array_cmplx_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_nbit_compound_2() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_nbit_compound_3</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests no-op datatypes in compound datatype for nbit filter</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> *</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Xiaowen Wu</span> <span class="hl com"> * Thursday, Mar. 31th, 2005</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_nbit_compound_3</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwc">typedef</span> <span class="hl kwb">struct</span> <span class="hl opt">{</span> <span class="hl com">/* Struct with some no-op type fields */</span> <span class="hl kwb">int</span> i<span class="hl opt">;</span> <span class="hl com">/* integer field, NOT a no-op type */</span> <span class="hl kwb">char</span> str<span class="hl opt">[</span><span class="hl num">30</span><span class="hl opt">];</span> <span class="hl com">/* fixed-length string, no-op type */</span> <span class="hl kwb">char</span> <span class="hl opt">*</span> vl_str<span class="hl opt">;</span> <span class="hl com">/* varible-length string, no-op type */</span> hvl_t v<span class="hl opt">;</span> <span class="hl com">/* VL datatype field, no-op type */</span> hobj_ref_t r<span class="hl opt">;</span> <span class="hl com">/* Object reference field, no-op type */</span> <span class="hl kwb">unsigned char</span> o<span class="hl opt">[</span><span class="hl num">5</span><span class="hl opt">];</span> <span class="hl com">/* Opaque field, no-op type */</span> <span class="hl opt">}</span> atomic<span class="hl opt">;</span> hid_t i_tid<span class="hl opt">,</span> str_tid<span class="hl opt">,</span> vl_str_tid<span class="hl opt">,</span> v_tid<span class="hl opt">,</span> o_tid<span class="hl opt">;</span> hid_t cmpd_tid<span class="hl opt">;</span> <span class="hl com">/* atomic compound datatype */</span> hid_t dataset<span class="hl opt">,</span> space<span class="hl opt">,</span> dc<span class="hl opt">,</span> obj_ref_dataset <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwb">const</span> hsize_t size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span><span class="hl num">5</span><span class="hl opt">};</span> <span class="hl kwb">const</span> hsize_t chunk_size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span><span class="hl num">5</span><span class="hl opt">};</span> atomic orig_data<span class="hl opt">[</span><span class="hl num">5</span><span class="hl opt">];</span> atomic new_data<span class="hl opt">[</span><span class="hl num">5</span><span class="hl opt">];</span> <span class="hl kwb">double</span> power<span class="hl opt">;</span> <span class="hl kwb">size_t</span> i<span class="hl opt">,</span> k<span class="hl opt">,</span> j<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" nbit compound with no-op type (setup)"</span><span class="hl opt">);</span> <span class="hl com">/* Define datatypes of members of compound datatype */</span> i_tid <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_NATIVE_INT<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_precision</span><span class="hl opt">(</span>i_tid<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">17</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> str_tid <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_C_S1<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_size</span><span class="hl opt">(</span>str_tid<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">30</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> vl_str_tid <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_C_S1<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_size</span><span class="hl opt">(</span>vl_str_tid<span class="hl opt">,</span> H5T_VARIABLE<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>v_tid <span class="hl opt">=</span> <span class="hl kwd">H5Tvlen_create</span><span class="hl opt">(</span>H5T_NATIVE_UINT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>o_tid <span class="hl opt">=</span> <span class="hl kwd">H5Tcreate</span><span class="hl opt">(</span>H5T_OPAQUE<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">5</span><span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_tag</span><span class="hl opt">(</span>o_tid<span class="hl opt">,</span> <span class="hl str">"testing opaque field"</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create a dataset compound datatype and insert some atomic types */</span> cmpd_tid <span class="hl opt">=</span> <span class="hl kwd">H5Tcreate</span><span class="hl opt">(</span>H5T_COMPOUND<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>atomic<span class="hl opt">));</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>cmpd_tid<span class="hl opt">,</span> <span class="hl str">"i"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>atomic<span class="hl opt">,</span> i<span class="hl opt">),</span> i_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>cmpd_tid<span class="hl opt">,</span> <span class="hl str">"str"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>atomic<span class="hl opt">,</span> str<span class="hl opt">),</span> str_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>cmpd_tid<span class="hl opt">,</span> <span class="hl str">"vl_str"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>atomic<span class="hl opt">,</span> vl_str<span class="hl opt">),</span> vl_str_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>cmpd_tid<span class="hl opt">,</span> <span class="hl str">"v"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>atomic<span class="hl opt">,</span> v<span class="hl opt">),</span> v_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>cmpd_tid<span class="hl opt">,</span> <span class="hl str">"r"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>atomic<span class="hl opt">,</span> r<span class="hl opt">),</span> H5T_STD_REF_OBJ<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tinsert</span><span class="hl opt">(</span>cmpd_tid<span class="hl opt">,</span> <span class="hl str">"o"</span><span class="hl opt">,</span> <span class="hl kwd">HOFFSET</span><span class="hl opt">(</span>atomic<span class="hl opt">,</span> o<span class="hl opt">),</span> o_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the data space */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> size<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Use nbit filter */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dc <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> chunk_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_nbit</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_NBIT_COMPOUND_NAME_3<span class="hl opt">,</span> cmpd_tid<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dc<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the dataset object reference points to */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>obj_ref_dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> <span class="hl str">"nbit_obj_ref"</span><span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Initialize data */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++) {</span> power <span class="hl opt">=</span> <span class="hl kwd">HDpow</span><span class="hl opt">(</span><span class="hl num">2.0</span><span class="hl opt">,</span> <span class="hl num">17.0</span> <span class="hl opt">-</span> <span class="hl num">1.0</span><span class="hl opt">);</span> <span class="hl kwd">HDmemset</span><span class="hl opt">(&</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">],</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">]));</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">].</span>i <span class="hl opt">= (</span><span class="hl kwb">int</span><span class="hl opt">)(</span><span class="hl kwd">HDrandom</span><span class="hl opt">() % (</span><span class="hl kwb">long</span><span class="hl opt">)</span>power<span class="hl opt">);</span> <span class="hl kwd">HDstrcpy</span><span class="hl opt">(</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">].</span>str<span class="hl opt">,</span> <span class="hl str">"fixed-length C string"</span><span class="hl opt">);</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">].</span>vl_str <span class="hl opt">=</span> <span class="hl kwd">HDstrdup</span><span class="hl opt">(</span><span class="hl str">"variable-length C string"</span><span class="hl opt">);</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">].</span>v<span class="hl opt">.</span>p <span class="hl opt">=</span> <span class="hl kwd">HDmalloc</span><span class="hl opt">((</span><span class="hl kwb">size_t</span><span class="hl opt">)(</span>i <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">) *</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">unsigned int</span><span class="hl opt">));</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">].</span>v<span class="hl opt">.</span>len <span class="hl opt">= (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>i <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>k <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> k <span class="hl opt">< (</span>i <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">);</span> k<span class="hl opt">++)</span> <span class="hl opt">((</span><span class="hl kwb">unsigned int</span> <span class="hl opt">*)</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">].</span>v<span class="hl opt">.</span>p<span class="hl opt">)[</span>k<span class="hl opt">] = (</span><span class="hl kwb">unsigned int</span><span class="hl opt">)(</span>i <span class="hl opt">*</span> <span class="hl num">100</span> <span class="hl opt">+</span> k<span class="hl opt">);</span> <span class="hl com">/* Create reference to the dataset "nbit_obj_ref" */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Rcreate</span><span class="hl opt">(&</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">].</span>r<span class="hl opt">,</span> file<span class="hl opt">,</span> <span class="hl str">"nbit_obj_ref"</span><span class="hl opt">,</span> H5R_OBJECT<span class="hl opt">, (</span>hid_t<span class="hl opt">)-</span><span class="hl num">1</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> <span class="hl num">5</span><span class="hl opt">;</span> j<span class="hl opt">++)</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">].</span>o<span class="hl opt">[</span>j<span class="hl opt">] = (</span><span class="hl kwb">unsigned char</span><span class="hl opt">)(</span>i <span class="hl opt">+</span> j<span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 1: Test nbit by setting up a chunked dataset and writing</span> <span class="hl com"> * to it.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" nbit compound with no-op type (write)"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> cmpd_tid<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> orig_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 2: Try to read the data we just wrote.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" nbit compound with no-op type (read)"</span><span class="hl opt">);</span> <span class="hl com">/* Read the dataset back */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> cmpd_tid<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> new_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Check that the values read are the same as the values written */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>new_data<span class="hl opt">[</span>i<span class="hl opt">].</span>i <span class="hl opt">!=</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">].</span>i <span class="hl opt">||</span> <span class="hl kwd">HDstrcmp</span><span class="hl opt">(</span>new_data<span class="hl opt">[</span>i<span class="hl opt">].</span>str<span class="hl opt">,</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">].</span>str<span class="hl opt">) !=</span> <span class="hl num">0</span> <span class="hl opt">||</span> <span class="hl kwd">HDstrcmp</span><span class="hl opt">(</span>new_data<span class="hl opt">[</span>i<span class="hl opt">].</span>vl_str<span class="hl opt">,</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">].</span>vl_str<span class="hl opt">) !=</span> <span class="hl num">0</span> <span class="hl opt">||</span> new_data<span class="hl opt">[</span>i<span class="hl opt">].</span>v<span class="hl opt">.</span>len <span class="hl opt">!=</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">].</span>v<span class="hl opt">.</span>len <span class="hl opt">||</span> new_data<span class="hl opt">[</span>i<span class="hl opt">].</span>r <span class="hl opt">!=</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">].</span>r<span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>i<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>k <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> k <span class="hl opt"><</span> i <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">;</span> k<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(((</span><span class="hl kwb">unsigned int</span> <span class="hl opt">*)</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">].</span>v<span class="hl opt">.</span>p<span class="hl opt">)[</span>k<span class="hl opt">] != ((</span><span class="hl kwb">unsigned int</span> <span class="hl opt">*)</span>new_data<span class="hl opt">[</span>i<span class="hl opt">].</span>v<span class="hl opt">.</span>p<span class="hl opt">)[</span>k<span class="hl opt">]) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>i<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> <span class="hl num">5</span><span class="hl opt">;</span> j<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">].</span>o<span class="hl opt">[</span>j<span class="hl opt">] !=</span> new_data<span class="hl opt">[</span>i<span class="hl opt">].</span>o<span class="hl opt">[</span>j<span class="hl opt">]) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>i<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * Cleanup</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Treclaim</span><span class="hl opt">(</span>cmpd_tid<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> new_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Treclaim</span><span class="hl opt">(</span>cmpd_tid<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> orig_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>i_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>str_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>vl_str_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>v_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>o_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>cmpd_tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>obj_ref_dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_nbit_compound_3() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_nbit_int_size</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests the correct size of the integer datatype for nbit filter</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> *</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Raymond Lu</span> <span class="hl com"> * 19 November 2010</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_nbit_int_size</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t dataspace<span class="hl opt">,</span> dataset<span class="hl opt">,</span> datatype<span class="hl opt">,</span> mem_datatype<span class="hl opt">,</span> dset_create_props<span class="hl opt">;</span> hsize_t dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">],</span> chunk_size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> hsize_t dset_size <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwb">int</span> <span class="hl opt">**</span> orig <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">int</span> <span class="hl opt">*</span> orig_data <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">double</span> power<span class="hl opt">;</span> <span class="hl kwb">int</span> i<span class="hl opt">,</span> j<span class="hl opt">;</span> <span class="hl kwb">size_t</span> precision<span class="hl opt">,</span> offset<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" nbit integer dataset size"</span><span class="hl opt">);</span> <span class="hl com">/* Set up data array */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>orig_data <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">*)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>DSET_DIM1 <span class="hl opt">*</span> DSET_DIM2<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>orig <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">**)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>DSET_DIM1<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>orig_data<span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> DSET_DIM1<span class="hl opt">;</span> i<span class="hl opt">++)</span> orig<span class="hl opt">[</span>i<span class="hl opt">] =</span> orig_data <span class="hl opt">+ (</span>i <span class="hl opt">*</span> DSET_DIM2<span class="hl opt">);</span> <span class="hl com">/* Define dataset datatype (integer), and set precision, offset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>datatype <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_NATIVE_INT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" line %d: H5Tcopy failed</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> precision <span class="hl opt">=</span> <span class="hl num">16</span><span class="hl opt">;</span> <span class="hl com">/* precision includes sign bit */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_precision</span><span class="hl opt">(</span>datatype<span class="hl opt">,</span> precision<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" line %d: H5Pset_precision failed</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> offset <span class="hl opt">=</span> <span class="hl num">8</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_offset</span><span class="hl opt">(</span>datatype<span class="hl opt">,</span> offset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" line %d: H5Tset_offset failed</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* Copy to memory datatype */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>mem_datatype <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>datatype<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" line %d: H5Tcopy failed</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* Set order of dataset datatype */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_order</span><span class="hl opt">(</span>datatype<span class="hl opt">,</span> H5T_ORDER_BE<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" line %d: H5Pset_order failed</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_size</span><span class="hl opt">(</span>datatype<span class="hl opt">,</span> <span class="hl num">4</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" line %d: H5Pset_size failed</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* Initialize data buffer with random data within correct range</span> <span class="hl com"> * corresponding to the memory datatype's precision and offset.</span> <span class="hl com"> */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> DSET_DIM1<span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> DSET_DIM2<span class="hl opt">;</span> j<span class="hl opt">++) {</span> power <span class="hl opt">=</span> <span class="hl kwd">HDpow</span><span class="hl opt">(</span><span class="hl num">2.0</span><span class="hl opt">, (</span><span class="hl kwb">double</span><span class="hl opt">)(</span>precision <span class="hl opt">-</span> <span class="hl num">1</span><span class="hl opt">));</span> orig<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] =</span> <span class="hl kwd">HDrandom</span><span class="hl opt">() % (</span><span class="hl kwb">int</span><span class="hl opt">)</span>power <span class="hl opt"><<</span> offset<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* Describe the dataspace. */</span> dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> DSET_DIM1<span class="hl opt">;</span> dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> DSET_DIM2<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataspace <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" line %d: H5Pcreate failed</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/*</span> <span class="hl com"> * Set the dataset creation property list to specify the chunks</span> <span class="hl com"> */</span> chunk_size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> DSET_DIM1 <span class="hl opt">/</span> <span class="hl num">10</span><span class="hl opt">;</span> chunk_size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> DSET_DIM2 <span class="hl opt">/</span> <span class="hl num">10</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dset_create_props <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" line %d: H5Pcreate failed</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dset_create_props<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" line %d: H5Pset_chunk failed</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/*</span> <span class="hl com"> * Set for n-bit compression</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_nbit</span><span class="hl opt">(</span>dset_create_props<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" line %d: H5Pset_nbit failed</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/*</span> <span class="hl com"> * Create a new dataset within the file.</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_NBIT_INT_SIZE_NAME<span class="hl opt">,</span> datatype<span class="hl opt">,</span> dataspace<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dset_create_props<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" line %d: H5dwrite failed</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/*</span> <span class="hl com"> * Write the array to the file.</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> mem_datatype<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> orig_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: H5Dwrite failed</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/*</span> <span class="hl com"> * Get the precision of the data type</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>precision <span class="hl opt">=</span> <span class="hl kwd">H5Tget_precision</span><span class="hl opt">(</span>datatype<span class="hl opt">)) ==</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: wrong precision size: %zu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">,</span> precision<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/*</span> <span class="hl com"> * The size of the dataset after compression should around 2 * DSET_DIM1 * DSET_DIM2</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dset_size <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dataset<span class="hl opt">)) <</span> DSET_DIM1 <span class="hl opt">*</span> DSET_DIM2 <span class="hl opt">* (</span>precision <span class="hl opt">/</span> <span class="hl num">8</span><span class="hl opt">) ||</span> dset_size <span class="hl opt">></span> DSET_DIM1 <span class="hl opt">*</span> DSET_DIM2 <span class="hl opt">* (</span>precision <span class="hl opt">/</span> <span class="hl num">8</span><span class="hl opt">) +</span> <span class="hl num">1</span> <span class="hl opt">*</span> KB<span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDfprintf</span><span class="hl opt">(</span>stdout<span class="hl opt">,</span> <span class="hl str">" Line %d: wrong dataset size: %"</span> PRIuHSIZE <span class="hl str">"</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">,</span> dset_size<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>datatype<span class="hl opt">);</span> <span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>mem_datatype<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>dataspace<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dset_create_props<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>orig<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>orig_data<span class="hl opt">);</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>orig<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>orig_data<span class="hl opt">);</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_nbit_int_size() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_nbit_flt_size</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests the correct size of the floating-number datatype for</span> <span class="hl com"> * nbit filter</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> *</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Raymond Lu</span> <span class="hl com"> * 19 November 2010</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_nbit_flt_size</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t dataspace<span class="hl opt">,</span> dataset<span class="hl opt">,</span> datatype<span class="hl opt">,</span> dset_create_props<span class="hl opt">;</span> hsize_t dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">],</span> chunk_size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> hsize_t dset_size <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwb">float</span> <span class="hl opt">**</span>orig <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">float</span> <span class="hl opt">*</span> orig_data <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">int</span> i<span class="hl opt">,</span> j<span class="hl opt">;</span> <span class="hl kwb">size_t</span> precision<span class="hl opt">,</span> offset<span class="hl opt">;</span> <span class="hl kwb">size_t</span> spos<span class="hl opt">,</span> epos<span class="hl opt">,</span> esize<span class="hl opt">,</span> mpos<span class="hl opt">,</span> msize<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" nbit floating-number dataset size"</span><span class="hl opt">);</span> <span class="hl com">/* Set up data array */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>orig_data <span class="hl opt">= (</span><span class="hl kwb">float</span> <span class="hl opt">*)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>DSET_DIM1 <span class="hl opt">*</span> DSET_DIM2<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">float</span><span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>orig <span class="hl opt">= (</span><span class="hl kwb">float</span> <span class="hl opt">**)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>DSET_DIM1<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>orig_data<span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> DSET_DIM1<span class="hl opt">;</span> i<span class="hl opt">++)</span> orig<span class="hl opt">[</span>i<span class="hl opt">] =</span> orig_data <span class="hl opt">+ (</span>i <span class="hl opt">*</span> DSET_DIM2<span class="hl opt">);</span> <span class="hl com">/* Define floating-point type for dataset</span> <span class="hl com"> *-------------------------------------------------------------------</span> <span class="hl com"> * size=4 byte, precision=16 bits, offset=8 bits,</span> <span class="hl com"> * mantissa size=9 bits, mantissa position=8,</span> <span class="hl com"> * exponent size=6 bits, exponent position=17,</span> <span class="hl com"> * exponent bias=31.</span> <span class="hl com"> * It can be illustrated in little-endian order as:</span> <span class="hl com"> * (S - sign bit, E - exponent bit, M - mantissa bit,</span> <span class="hl com"> * ? - padding bit)</span> <span class="hl com"> *</span> <span class="hl com"> * 3 2 1 0</span> <span class="hl com"> * ???????? SEEEEEEM MMMMMMMM ????????</span> <span class="hl com"> *</span> <span class="hl com"> * To create a new floating-point type, the following</span> <span class="hl com"> * properties must be set in the order of</span> <span class="hl com"> * set fields -> set offset -> set precision -> set size.</span> <span class="hl com"> * All these properties must be set before the type can function.</span> <span class="hl com"> * Other properties can be set anytime. Derived type size cannot</span> <span class="hl com"> * be expanded bigger than original size but can be decreased.</span> <span class="hl com"> * There should be no holes among the significant bits. Exponent</span> <span class="hl com"> * bias usually is set 2^(n-1)-1, where n is the exponent size.</span> <span class="hl com"> *-------------------------------------------------------------------*/</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>datatype <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_IEEE_F32LE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" line %d: H5Tcopy failed</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> msize <span class="hl opt">=</span> <span class="hl num">9</span><span class="hl opt">;</span> spos <span class="hl opt">=</span> <span class="hl num">23</span><span class="hl opt">;</span> epos <span class="hl opt">=</span> <span class="hl num">17</span><span class="hl opt">;</span> esize <span class="hl opt">=</span> <span class="hl num">6</span><span class="hl opt">;</span> mpos <span class="hl opt">=</span> <span class="hl num">8</span><span class="hl opt">;</span> offset <span class="hl opt">=</span> <span class="hl num">8</span><span class="hl opt">;</span> precision <span class="hl opt">=</span> <span class="hl num">16</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_fields</span><span class="hl opt">(</span>datatype<span class="hl opt">,</span> spos<span class="hl opt">,</span> epos<span class="hl opt">,</span> esize<span class="hl opt">,</span> mpos<span class="hl opt">,</span> msize<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" line %d: H5Tset_fields failed</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_offset</span><span class="hl opt">(</span>datatype<span class="hl opt">,</span> offset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" line %d: H5Tset_offset failed</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_precision</span><span class="hl opt">(</span>datatype<span class="hl opt">,</span> precision<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" line %d: H5Tset_precision failed</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_size</span><span class="hl opt">(</span>datatype<span class="hl opt">,</span> <span class="hl num">4</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" line %d: H5Pset_size failed</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Set order of dataset datatype */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_order</span><span class="hl opt">(</span>datatype<span class="hl opt">,</span> H5T_ORDER_BE<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" line %d: H5Pset_order failed</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_ebias</span><span class="hl opt">(</span>datatype<span class="hl opt">,</span> <span class="hl num">31</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" line %d: H5Pset_size failed</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/*</span> <span class="hl com"> * Initialize data buffer with random data</span> <span class="hl com"> */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> DSET_DIM1<span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> DSET_DIM2<span class="hl opt">;</span> j<span class="hl opt">++)</span> orig<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] = (</span><span class="hl kwb">float</span><span class="hl opt">)(</span><span class="hl kwd">HDrandom</span><span class="hl opt">() %</span> <span class="hl num">1234567</span><span class="hl opt">) /</span> <span class="hl num">2</span><span class="hl opt">;</span> <span class="hl com">/* Describe the dataspace. */</span> dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> DSET_DIM1<span class="hl opt">;</span> dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> DSET_DIM2<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataspace <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" line %d: H5Pcreate failed</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/*</span> <span class="hl com"> * Set the dataset creation property list to specify the chunks</span> <span class="hl com"> */</span> chunk_size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> DSET_DIM1 <span class="hl opt">/</span> <span class="hl num">10</span><span class="hl opt">;</span> chunk_size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> DSET_DIM2 <span class="hl opt">/</span> <span class="hl num">10</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dset_create_props <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" line %d: H5Pcreate failed</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dset_create_props<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" line %d: H5Pset_chunk failed</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/*</span> <span class="hl com"> * Set for n-bit compression</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_nbit</span><span class="hl opt">(</span>dset_create_props<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" line %d: H5Pset_nbit failed</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/*</span> <span class="hl com"> * Create a new dataset within the file.</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_NBIT_FLT_SIZE_NAME<span class="hl opt">,</span> datatype<span class="hl opt">,</span> dataspace<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dset_create_props<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" line %d: H5dwrite failed</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/*</span> <span class="hl com"> * Write the array to the file.</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_FLOAT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> orig_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: H5Dwrite failed</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/*</span> <span class="hl com"> * Get the precision of the data type</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>precision <span class="hl opt">=</span> <span class="hl kwd">H5Tget_precision</span><span class="hl opt">(</span>datatype<span class="hl opt">)) ==</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: wrong precision size: %zu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">,</span> precision<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/*</span> <span class="hl com"> * The size of the dataset after compression should around 2 * DSET_DIM1 * DSET_DIM2</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dset_size <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dataset<span class="hl opt">)) <</span> DSET_DIM1 <span class="hl opt">*</span> DSET_DIM2 <span class="hl opt">* (</span>precision <span class="hl opt">/</span> <span class="hl num">8</span><span class="hl opt">) ||</span> dset_size <span class="hl opt">></span> DSET_DIM1 <span class="hl opt">*</span> DSET_DIM2 <span class="hl opt">* (</span>precision <span class="hl opt">/</span> <span class="hl num">8</span><span class="hl opt">) +</span> <span class="hl num">1</span> <span class="hl opt">*</span> KB<span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDfprintf</span><span class="hl opt">(</span>stdout<span class="hl opt">,</span> <span class="hl str">" Line %d: wrong dataset size: %"</span> PRIuHSIZE <span class="hl str">"</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">,</span> dset_size<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>datatype<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>dataspace<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dset_create_props<span class="hl opt">);</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>orig<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>orig_data<span class="hl opt">);</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>orig<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>orig_data<span class="hl opt">);</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_nbit_flt_size() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_scaleoffset_int</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests the integer datatype for scaleoffset filter</span> <span class="hl com"> * with fill value not defined</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> *</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Xiaowen Wu</span> <span class="hl com"> * Monday, Feb. 14th, 2005</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_scaleoffset_int</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t dataset<span class="hl opt">,</span> datatype<span class="hl opt">,</span> space<span class="hl opt">,</span> dc<span class="hl opt">;</span> <span class="hl kwb">const</span> hsize_t size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">};</span> <span class="hl kwb">const</span> hsize_t chunk_size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">};</span> <span class="hl kwb">int</span> orig_data<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">];</span> <span class="hl kwb">int</span> new_data<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">];</span> <span class="hl kwb">size_t</span> i<span class="hl opt">,</span> j<span class="hl opt">;</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">"Testing scaleoffset filter"</span><span class="hl opt">);</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" scaleoffset int without fill value (setup)"</span><span class="hl opt">);</span> datatype <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_NATIVE_INT<span class="hl opt">);</span> <span class="hl com">/* Set order of dataset datatype */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_order</span><span class="hl opt">(</span>datatype<span class="hl opt">,</span> H5T_ORDER_BE<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the data space */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> size<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the dataset property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dc <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Fill value undefined */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fill_value</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> datatype<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Set up to use scaleoffset filter, let library calculate minbits */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_scaleoffset</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> H5Z_SO_INT<span class="hl opt">,</span> H5Z_SO_INT_MINBITS_DEFAULT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_SCALEOFFSET_INT_NAME<span class="hl opt">,</span> datatype<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dc<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Initialize data */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] =</span> <span class="hl kwd">HDrandom</span><span class="hl opt">() %</span> <span class="hl num">10000</span><span class="hl opt">;</span> <span class="hl com">/* even-numbered values are negative */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>i <span class="hl opt">*</span> size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] +</span> j <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">) %</span> <span class="hl num">2</span> <span class="hl opt">==</span> <span class="hl num">0</span><span class="hl opt">)</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] = -</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">];</span> <span class="hl opt">}</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 1: Test scaleoffset by setting up a chunked dataset and writing</span> <span class="hl com"> * to it.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" scaleoffset int without fill value (write)"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> orig_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 2: Try to read the data we just wrote.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" scaleoffset int without fill value (read)"</span><span class="hl opt">);</span> <span class="hl com">/* Read the dataset back */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> new_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Check that the values read are the same as the values written */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>new_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] !=</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %lu,%lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>i<span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>j<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * Cleanup</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>datatype<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_scaleoffset_int() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_scaleoffset_int_2</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests the integer datatype for scaleoffset filter</span> <span class="hl com"> * with fill value set</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> *</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Xiaowen Wu</span> <span class="hl com"> * Tuesday, March 15th, 2005</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_scaleoffset_int_2</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t dataset<span class="hl opt">,</span> datatype<span class="hl opt">,</span> space<span class="hl opt">,</span> mspace<span class="hl opt">,</span> dc<span class="hl opt">;</span> <span class="hl kwb">const</span> hsize_t size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">};</span> <span class="hl kwb">const</span> hsize_t chunk_size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">};</span> <span class="hl kwb">int</span> orig_data<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">];</span> <span class="hl kwb">int</span> new_data<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">];</span> hsize_t start<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Start of hyperslab */</span> hsize_t stride<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Stride of hyperslab */</span> hsize_t count<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Block count */</span> hsize_t block<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Block sizes */</span> <span class="hl kwb">int</span> fillval<span class="hl opt">;</span> <span class="hl kwb">size_t</span> j<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" scaleoffset int with fill value (setup)"</span><span class="hl opt">);</span> datatype <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_NATIVE_INT<span class="hl opt">);</span> <span class="hl com">/* Set order of dataset datatype */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_order</span><span class="hl opt">(</span>datatype<span class="hl opt">,</span> H5T_ORDER_BE<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the data space for the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> size<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the dataset property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dc <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Set fill value */</span> fillval <span class="hl opt">=</span> <span class="hl num">10000</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fill_value</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">, &</span>fillval<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Set up to use scaleoffset filter, let library calculate minbits */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_scaleoffset</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> H5Z_SO_INT<span class="hl opt">,</span> H5Z_SO_INT_MINBITS_DEFAULT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_SCALEOFFSET_INT_NAME_2<span class="hl opt">,</span> datatype<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dc<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the memory data space */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>mspace <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> size<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Select hyperslab for data to write, using 1x5 blocks,</span> <span class="hl com"> * (1,1) stride and (1,1) count starting at the position (0,0).</span> <span class="hl com"> */</span> start<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">0</span><span class="hl opt">;</span> start<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">0</span><span class="hl opt">;</span> stride<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> stride<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> block<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> block<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">5</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>mspace<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> start<span class="hl opt">,</span> stride<span class="hl opt">,</span> count<span class="hl opt">,</span> block<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Initialize data of hyperslab */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> orig_data<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">][</span>j<span class="hl opt">] = (</span><span class="hl kwb">int</span><span class="hl opt">)</span><span class="hl kwd">HDrandom</span><span class="hl opt">() %</span> <span class="hl num">10000</span><span class="hl opt">;</span> <span class="hl com">/* even-numbered values are negative */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>j <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">) %</span> <span class="hl num">2</span> <span class="hl opt">==</span> <span class="hl num">0</span><span class="hl opt">)</span> orig_data<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">][</span>j<span class="hl opt">] = -</span>orig_data<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">][</span>j<span class="hl opt">];</span> <span class="hl opt">}</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 1: Test scaleoffset by setting up a chunked dataset and writing</span> <span class="hl com"> * to it.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" scaleoffset int with fill value (write)"</span><span class="hl opt">);</span> <span class="hl com">/* only data in the hyperslab will be written, other value should be fill value */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> mspace<span class="hl opt">,</span> mspace<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> orig_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 2: Try to read the data we just wrote.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" scaleoffset int with fill value (read)"</span><span class="hl opt">);</span> <span class="hl com">/* Read the dataset back */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> mspace<span class="hl opt">,</span> mspace<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> new_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Check that the values read are the same as the values written */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>new_data<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">][</span>j<span class="hl opt">] !=</span> orig_data<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">][</span>j<span class="hl opt">]) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %lu,%lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span><span class="hl num">0</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>j<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * Cleanup</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>datatype<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_scaleoffset_int_2() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_scaleoffset_float</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests the float datatype for scaleoffset filter, with fill</span> <span class="hl com"> * value undefined, using variable-minimum-bits method</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> *</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Xiaowen Wu</span> <span class="hl com"> * Wednesday, Apr. 20th, 2005</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_scaleoffset_float</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t dataset<span class="hl opt">,</span> datatype<span class="hl opt">,</span> space<span class="hl opt">,</span> dc<span class="hl opt">;</span> <span class="hl kwb">const</span> hsize_t size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">};</span> <span class="hl kwb">const</span> hsize_t chunk_size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">};</span> <span class="hl kwb">float</span> orig_data<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">];</span> <span class="hl kwb">float</span> new_data<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">];</span> <span class="hl kwb">size_t</span> i<span class="hl opt">,</span> j<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" scaleoffset float without fill value, D-scaling (setup)"</span><span class="hl opt">);</span> datatype <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_NATIVE_FLOAT<span class="hl opt">);</span> <span class="hl com">/* Set order of dataset datatype */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_order</span><span class="hl opt">(</span>datatype<span class="hl opt">,</span> H5T_ORDER_BE<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the data space */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> size<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the dataset property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dc <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Fill value undefined */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fill_value</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> datatype<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Set up to use scaleoffset filter, decimal scale factor is 3,</span> <span class="hl com"> * use variable-minimum-bits method</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_scaleoffset</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> H5Z_SO_FLOAT_DSCALE<span class="hl opt">,</span> <span class="hl num">3</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_SCALEOFFSET_FLOAT_NAME<span class="hl opt">,</span> datatype<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dc<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Initialize data */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] = (</span><span class="hl kwb">float</span><span class="hl opt">)(</span><span class="hl kwd">HDrandom</span><span class="hl opt">() %</span> <span class="hl num">100000</span><span class="hl opt">) /</span> <span class="hl num">1000.0</span>F<span class="hl opt">;</span> <span class="hl com">/* even-numbered values are negative */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>i <span class="hl opt">*</span> size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] +</span> j <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">) %</span> <span class="hl num">2</span> <span class="hl opt">==</span> <span class="hl num">0</span><span class="hl opt">)</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] = -</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">];</span> <span class="hl opt">}</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 1: Test scaleoffset by setting up a chunked dataset and writing</span> <span class="hl com"> * to it.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" scaleoffset float without fill value, D-scaling (write)"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_FLOAT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> orig_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 2: Try to read the data we just wrote.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" scaleoffset float without fill value, D-scaling (read)"</span><span class="hl opt">);</span> <span class="hl com">/* Read the dataset back */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_FLOAT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> new_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Check that the values read are the same as the values written */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">HDfabs</span><span class="hl opt">((</span><span class="hl kwb">double</span><span class="hl opt">)(</span>new_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] -</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">])) ></span> <span class="hl kwd">HDpow</span><span class="hl opt">(</span><span class="hl num">10.0</span><span class="hl opt">, -</span><span class="hl num">3.0</span><span class="hl opt">)) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %lu,%lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>i<span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>j<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * Cleanup</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>datatype<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_scaleoffset_float() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_scaleoffset_float_2</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests the float datatype for scaleoffset filter, with fill</span> <span class="hl com"> * value set, using variable-minimum-bits method</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> *</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Xiaowen Wu</span> <span class="hl com"> * Wednesday, Apr. 20th, 2005</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_scaleoffset_float_2</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t dataset<span class="hl opt">,</span> datatype<span class="hl opt">,</span> space<span class="hl opt">,</span> mspace<span class="hl opt">,</span> dc<span class="hl opt">;</span> <span class="hl kwb">const</span> hsize_t size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">};</span> <span class="hl kwb">const</span> hsize_t chunk_size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">};</span> <span class="hl kwb">float</span> orig_data<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">];</span> <span class="hl kwb">float</span> new_data<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">];</span> <span class="hl kwb">float</span> fillval<span class="hl opt">;</span> hsize_t start<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Start of hyperslab */</span> hsize_t stride<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Stride of hyperslab */</span> hsize_t count<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Block count */</span> hsize_t block<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Block sizes */</span> <span class="hl kwb">size_t</span> j<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" scaleoffset float with fill value, D-scaling (setup)"</span><span class="hl opt">);</span> datatype <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_NATIVE_FLOAT<span class="hl opt">);</span> <span class="hl com">/* Set order of dataset datatype */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_order</span><span class="hl opt">(</span>datatype<span class="hl opt">,</span> H5T_ORDER_BE<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the data space for the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> size<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the dataset property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dc <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Set fill value */</span> fillval <span class="hl opt">=</span> <span class="hl num">10000.0</span>F<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fill_value</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> H5T_NATIVE_FLOAT<span class="hl opt">, &</span>fillval<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Set up to use scaleoffset filter, decimal scale factor is 3,</span> <span class="hl com"> * use variable-minimum-bits method</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_scaleoffset</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> H5Z_SO_FLOAT_DSCALE<span class="hl opt">,</span> <span class="hl num">3</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_SCALEOFFSET_FLOAT_NAME_2<span class="hl opt">,</span> datatype<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dc<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the memory data space */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>mspace <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> size<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Select hyperslab for data to write, using 1x5 blocks,</span> <span class="hl com"> * (1,1) stride and (1,1) count starting at the position (0,0).</span> <span class="hl com"> */</span> start<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">0</span><span class="hl opt">;</span> start<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">0</span><span class="hl opt">;</span> stride<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> stride<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> block<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> block<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">5</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>mspace<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> start<span class="hl opt">,</span> stride<span class="hl opt">,</span> count<span class="hl opt">,</span> block<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Initialize data of hyperslab */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> orig_data<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">][</span>j<span class="hl opt">] = (</span><span class="hl kwb">float</span><span class="hl opt">)(</span><span class="hl kwd">HDrandom</span><span class="hl opt">() %</span> <span class="hl num">100000</span><span class="hl opt">) /</span> <span class="hl num">1000.0</span>F<span class="hl opt">;</span> <span class="hl com">/* even-numbered values are negative */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>j <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">) %</span> <span class="hl num">2</span> <span class="hl opt">==</span> <span class="hl num">0</span><span class="hl opt">)</span> orig_data<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">][</span>j<span class="hl opt">] = -</span>orig_data<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">][</span>j<span class="hl opt">];</span> <span class="hl opt">}</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 1: Test scaleoffset by setting up a chunked dataset and writing</span> <span class="hl com"> * to it.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" scaleoffset float with fill value, D-scaling (write)"</span><span class="hl opt">);</span> <span class="hl com">/* only data in the hyperslab will be written, other value should be fill value */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_FLOAT<span class="hl opt">,</span> mspace<span class="hl opt">,</span> mspace<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> orig_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 2: Try to read the data we just wrote.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" scaleoffset float with fill value, D-scaling (read)"</span><span class="hl opt">);</span> <span class="hl com">/* Read the dataset back */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_FLOAT<span class="hl opt">,</span> mspace<span class="hl opt">,</span> mspace<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> new_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Check that the values read are the same as the values written */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">HDfabs</span><span class="hl opt">((</span><span class="hl kwb">double</span><span class="hl opt">)(</span>new_data<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">][</span>j<span class="hl opt">] -</span> orig_data<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">][</span>j<span class="hl opt">])) ></span> <span class="hl kwd">HDpow</span><span class="hl opt">(</span><span class="hl num">10.0</span><span class="hl opt">, -</span><span class="hl num">3.0</span><span class="hl opt">)) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %lu,%lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span><span class="hl num">0</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>j<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * Cleanup</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>datatype<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_scaleoffset_float_2() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_scaleoffset_double</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests the double datatype for scaleoffset filter, with fill</span> <span class="hl com"> * value undefined, using variable-minimum-bits method</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> *</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Xiaowen Wu</span> <span class="hl com"> * Monday, Apr. 25th, 2005</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_scaleoffset_double</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t dataset<span class="hl opt">,</span> datatype<span class="hl opt">,</span> space<span class="hl opt">,</span> dc<span class="hl opt">;</span> <span class="hl kwb">const</span> hsize_t size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">};</span> <span class="hl kwb">const</span> hsize_t chunk_size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">};</span> <span class="hl kwb">double</span> orig_data<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">];</span> <span class="hl kwb">double</span> new_data<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">];</span> <span class="hl kwb">size_t</span> i<span class="hl opt">,</span> j<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" scaleoffset double without fill value, D-scaling (setup)"</span><span class="hl opt">);</span> datatype <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_NATIVE_DOUBLE<span class="hl opt">);</span> <span class="hl com">/* Set order of dataset datatype */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_order</span><span class="hl opt">(</span>datatype<span class="hl opt">,</span> H5T_ORDER_BE<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the data space */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> size<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the dataset property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dc <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Fill value undefined */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fill_value</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> datatype<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Set up to use scaleoffset filter, decimal scale factor is 7,</span> <span class="hl com"> * use variable-minimum-bits method</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_scaleoffset</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> H5Z_SO_FLOAT_DSCALE<span class="hl opt">,</span> <span class="hl num">7</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_SCALEOFFSET_DOUBLE_NAME<span class="hl opt">,</span> datatype<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dc<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Initialize data */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] = (</span><span class="hl kwd">HDrandom</span><span class="hl opt">() %</span> <span class="hl num">10000000</span><span class="hl opt">) /</span> <span class="hl num">10000000.0</span><span class="hl opt">;</span> <span class="hl com">/* even-numbered values are negative */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>i <span class="hl opt">*</span> size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] +</span> j <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">) %</span> <span class="hl num">2</span> <span class="hl opt">==</span> <span class="hl num">0</span><span class="hl opt">)</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] = -</span>orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">];</span> <span class="hl opt">}</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 1: Test scaleoffset by setting up a chunked dataset and writing</span> <span class="hl com"> * to it.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" scaleoffset double without fill value, D-scaling (write)"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_DOUBLE<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> orig_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 2: Try to read the data we just wrote.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" scaleoffset double without fill value, D-scaling (read)"</span><span class="hl opt">);</span> <span class="hl com">/* Read the dataset back */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_DOUBLE<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> new_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Check that the values read are the same as the values written */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">HDfabs</span><span class="hl opt">(</span>new_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] -</span> orig_data<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]) ></span> <span class="hl kwd">HDpow</span><span class="hl opt">(</span><span class="hl num">10.0</span><span class="hl opt">, -</span><span class="hl num">7.0</span><span class="hl opt">)) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %lu,%lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>i<span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>j<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * Cleanup</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>datatype<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_scaleoffset_double() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_scaleoffset_double_2</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests the double datatype for scaleoffset filter, with fill</span> <span class="hl com"> * value set, using variable-minimum-bits method</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> *</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Xiaowen Wu</span> <span class="hl com"> * Monday, Apr. 25th, 2005</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_scaleoffset_double_2</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t dataset<span class="hl opt">,</span> datatype<span class="hl opt">,</span> space<span class="hl opt">,</span> mspace<span class="hl opt">,</span> dc<span class="hl opt">;</span> <span class="hl kwb">const</span> hsize_t size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">};</span> <span class="hl kwb">const</span> hsize_t chunk_size<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">};</span> <span class="hl kwb">double</span> orig_data<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">];</span> <span class="hl kwb">double</span> new_data<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">];</span> <span class="hl kwb">double</span> fillval<span class="hl opt">;</span> hsize_t start<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Start of hyperslab */</span> hsize_t stride<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Stride of hyperslab */</span> hsize_t count<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Block count */</span> hsize_t block<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Block sizes */</span> <span class="hl kwb">size_t</span> j<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" scaleoffset double with fill value, D-scaling (setup)"</span><span class="hl opt">);</span> datatype <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_NATIVE_DOUBLE<span class="hl opt">);</span> <span class="hl com">/* Set order of dataset datatype */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tset_order</span><span class="hl opt">(</span>datatype<span class="hl opt">,</span> H5T_ORDER_BE<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the data space for the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> size<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the dataset property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dc <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Set fill value */</span> fillval <span class="hl opt">=</span> <span class="hl num">10000.0</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fill_value</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> H5T_NATIVE_DOUBLE<span class="hl opt">, &</span>fillval<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Set up to use scaleoffset filter, decimal scale factor is 7,</span> <span class="hl com"> * use variable-minimum-bits method</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_scaleoffset</span><span class="hl opt">(</span>dc<span class="hl opt">,</span> H5Z_SO_FLOAT_DSCALE<span class="hl opt">,</span> <span class="hl num">7</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_SCALEOFFSET_DOUBLE_NAME_2<span class="hl opt">,</span> datatype<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dc<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Create the memory data space */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>mspace <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> size<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Select hyperslab for data to write, using 1x5 blocks,</span> <span class="hl com"> * (1,1) stride and (1,1) count starting at the position (0,0).</span> <span class="hl com"> */</span> start<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">0</span><span class="hl opt">;</span> start<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">0</span><span class="hl opt">;</span> stride<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> stride<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> block<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> block<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">5</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>mspace<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> start<span class="hl opt">,</span> stride<span class="hl opt">,</span> count<span class="hl opt">,</span> block<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Initialize data of hyperslab */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> orig_data<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">][</span>j<span class="hl opt">] = (</span><span class="hl kwd">HDrandom</span><span class="hl opt">() %</span> <span class="hl num">10000000</span><span class="hl opt">) /</span> <span class="hl num">10000000.0</span><span class="hl opt">;</span> <span class="hl com">/* even-numbered values are negative */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>j <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">) %</span> <span class="hl num">2</span> <span class="hl opt">==</span> <span class="hl num">0</span><span class="hl opt">)</span> orig_data<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">][</span>j<span class="hl opt">] = -</span>orig_data<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">][</span>j<span class="hl opt">];</span> <span class="hl opt">}</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 1: Test scaleoffset by setting up a chunked dataset and writing</span> <span class="hl com"> * to it.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" scaleoffset double with fill value, D-scaling (write)"</span><span class="hl opt">);</span> <span class="hl com">/* only data in the hyperslab will be written, other value should be fill value */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_DOUBLE<span class="hl opt">,</span> mspace<span class="hl opt">,</span> mspace<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> orig_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * STEP 2: Try to read the data we just wrote.</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">" scaleoffset double with fill value, D-scaling (read)"</span><span class="hl opt">);</span> <span class="hl com">/* Read the dataset back */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dataset<span class="hl opt">,</span> H5T_NATIVE_DOUBLE<span class="hl opt">,</span> mspace<span class="hl opt">,</span> mspace<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> new_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Check that the values read are the same as the values written */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">HDfabs</span><span class="hl opt">((</span><span class="hl kwb">double</span><span class="hl opt">)(</span>new_data<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">][</span>j<span class="hl opt">] -</span> orig_data<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">][</span>j<span class="hl opt">])) ></span> <span class="hl kwd">HDpow</span><span class="hl opt">(</span><span class="hl num">10.0</span><span class="hl opt">, -</span><span class="hl num">7.0</span><span class="hl opt">)) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %lu,%lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span><span class="hl num">0</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>j<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * Cleanup</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>datatype<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dc<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_scaleoffset_double_2() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_multiopen</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests that a bug no longer exists. If a dataset is opened</span> <span class="hl com"> * twice and one of the handles is used to extend the dataset,</span> <span class="hl com"> * then the other handle should return the new size when</span> <span class="hl com"> * queried.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> *</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Robb Matzke</span> <span class="hl com"> * Tuesday, June 9, 1998</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_multiopen</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> space <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> dset1 <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> dset2 <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hsize_t cur_size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span><span class="hl num">10</span><span class="hl opt">};</span> hsize_t tmp_size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> <span class="hl kwb">static</span> hsize_t max_size<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span>H5S_UNLIMITED<span class="hl opt">};</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"multi-open with extending"</span><span class="hl opt">);</span> <span class="hl com">/* Create the dataset and open it twice */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> cur_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> cur_size<span class="hl opt">,</span> max_size<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dset1 <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> <span class="hl str">"multiopen"</span><span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dset2 <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>dset1<span class="hl opt">,</span> <span class="hl str">"."</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Extend with the first handle */</span> cur_size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">20</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dset_extent</span><span class="hl opt">(</span>dset1<span class="hl opt">,</span> cur_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Get the size from the second handle */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Dget_space</span><span class="hl opt">(</span>dset2<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sget_simple_extent_dims</span><span class="hl opt">(</span>space<span class="hl opt">,</span> tmp_size<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>cur_size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] !=</span> tmp_size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Got %d instead of %d!</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">int</span><span class="hl opt">)</span>tmp_size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">], (</span><span class="hl kwb">int</span><span class="hl opt">)</span>cur_size<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dset1<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dset2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dset1<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dset2<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_multiopen() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_types</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Make some datasets with various types so we can test h5ls.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> *</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Robb Matzke</span> <span class="hl com"> * Monday, June 7, 1999</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_types</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t grp <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> type <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> space <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> dset <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwb">size_t</span> i<span class="hl opt">;</span> hsize_t nelmts<span class="hl opt">;</span> <span class="hl kwb">unsigned char</span> buf<span class="hl opt">[</span><span class="hl num">32</span><span class="hl opt">];</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"various datatypes"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>grp <span class="hl opt">=</span> <span class="hl kwd">H5Gcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> <span class="hl str">"typetests"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* bitfield_1 */</span> nelmts <span class="hl opt">=</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>buf<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>type <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_STD_B8LE<span class="hl opt">)) <</span> <span class="hl num">0</span> <span class="hl opt">|| (</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">, &</span>nelmts<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span> <span class="hl opt">||</span> <span class="hl opt">(</span>dset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>grp<span class="hl opt">,</span> <span class="hl str">"bitfield_1"</span><span class="hl opt">,</span> type<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl kwa">sizeof</span> buf<span class="hl opt">;</span> i<span class="hl opt">++)</span> buf<span class="hl opt">[</span>i<span class="hl opt">] = (</span><span class="hl kwb">unsigned char</span><span class="hl opt">)(</span><span class="hl num">0xff</span> <span class="hl opt">^</span> i<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dset<span class="hl opt">,</span> type<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> buf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* bitfield_2 */</span> nelmts <span class="hl opt">=</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>buf<span class="hl opt">) /</span> <span class="hl num">2</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>type <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_STD_B16LE<span class="hl opt">)) <</span> <span class="hl num">0</span> <span class="hl opt">|| (</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">, &</span>nelmts<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span> <span class="hl opt">||</span> <span class="hl opt">(</span>dset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>grp<span class="hl opt">,</span> <span class="hl str">"bitfield_2"</span><span class="hl opt">,</span> type<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl kwa">sizeof</span> buf<span class="hl opt">;</span> i<span class="hl opt">++)</span> buf<span class="hl opt">[</span>i<span class="hl opt">] = (</span><span class="hl kwb">unsigned char</span><span class="hl opt">)(</span><span class="hl num">0xff</span> <span class="hl opt">^</span> i<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dset<span class="hl opt">,</span> type<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> buf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* opaque_1 */</span> nelmts <span class="hl opt">=</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>buf<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>type <span class="hl opt">=</span> <span class="hl kwd">H5Tcreate</span><span class="hl opt">(</span>H5T_OPAQUE<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">1</span><span class="hl opt">)) <</span> <span class="hl num">0</span> <span class="hl opt">||</span> <span class="hl kwd">H5Tset_tag</span><span class="hl opt">(</span>type<span class="hl opt">,</span> <span class="hl str">"testing 1-byte opaque type"</span><span class="hl opt">) <</span> <span class="hl num">0</span> <span class="hl opt">||</span> <span class="hl opt">(</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">, &</span>nelmts<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span> <span class="hl opt">||</span> <span class="hl opt">(</span>dset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>grp<span class="hl opt">,</span> <span class="hl str">"opaque_1"</span><span class="hl opt">,</span> type<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl kwa">sizeof</span> buf<span class="hl opt">;</span> i<span class="hl opt">++)</span> buf<span class="hl opt">[</span>i<span class="hl opt">] = (</span><span class="hl kwb">unsigned char</span><span class="hl opt">)(</span><span class="hl num">0xff</span> <span class="hl opt">^</span> i<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dset<span class="hl opt">,</span> type<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> buf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* opaque_2 */</span> nelmts <span class="hl opt">=</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>buf<span class="hl opt">) /</span> <span class="hl num">4</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>type <span class="hl opt">=</span> <span class="hl kwd">H5Tcreate</span><span class="hl opt">(</span>H5T_OPAQUE<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">4</span><span class="hl opt">)) <</span> <span class="hl num">0</span> <span class="hl opt">||</span> <span class="hl kwd">H5Tset_tag</span><span class="hl opt">(</span>type<span class="hl opt">,</span> <span class="hl str">"testing 4-byte opaque type"</span><span class="hl opt">) <</span> <span class="hl num">0</span> <span class="hl opt">||</span> <span class="hl opt">(</span>space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">, &</span>nelmts<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span> <span class="hl opt">||</span> <span class="hl opt">(</span>dset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>grp<span class="hl opt">,</span> <span class="hl str">"opaque_2"</span><span class="hl opt">,</span> type<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl kwa">sizeof</span> buf<span class="hl opt">;</span> i<span class="hl opt">++)</span> buf<span class="hl opt">[</span>i<span class="hl opt">] = (</span><span class="hl kwb">unsigned char</span><span class="hl opt">)(</span><span class="hl num">0xff</span> <span class="hl opt">^</span> i<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dset<span class="hl opt">,</span> type<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> buf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Cleanup */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Gclose</span><span class="hl opt">(</span>grp<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Gclose</span><span class="hl opt">(</span>grp<span class="hl opt">);</span> <span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>type<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dset<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_types() */</span> <span class="hl com">/* This message derives from H5Z */</span> <span class="hl kwb">const</span> H5Z_class2_t H5Z_CAN_APPLY_TEST<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {{</span> H5Z_CLASS_T_VERS<span class="hl opt">,</span> H5Z_FILTER_CAN_APPLY_TEST<span class="hl opt">,</span> <span class="hl com">/* Filter id number */</span> <span class="hl num">1</span><span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> <span class="hl str">"can_apply_test"</span><span class="hl opt">,</span> <span class="hl com">/* Filter name for debugging */</span> can_apply_bogus<span class="hl opt">,</span> <span class="hl com">/* The "can apply" callback */</span> NULL<span class="hl opt">,</span> <span class="hl com">/* The "set local" callback */</span> filter_bogus<span class="hl opt">,</span> <span class="hl com">/* The actual filter function */</span> <span class="hl opt">}};</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_can_apply</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests library behavior when filter indicates it can't</span> <span class="hl com"> * apply to certain combinations of creation parameters.</span> <span class="hl com"> * The filter is mandate. If the CAN_APPLY callback function</span> <span class="hl com"> * indicates wrong datatype, the dataset creation should fail.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Quincey Koziol</span> <span class="hl com"> * Friday, April 5, 2003</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_can_apply</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t dsid<span class="hl opt">;</span> <span class="hl com">/* Dataset ID */</span> hid_t sid<span class="hl opt">;</span> <span class="hl com">/* Dataspace ID */</span> hid_t dcpl<span class="hl opt">;</span> <span class="hl com">/* Dataspace creation property list ID */</span> <span class="hl kwb">const</span> hsize_t dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span>DSET_DIM1<span class="hl opt">,</span> DSET_DIM2<span class="hl opt">};</span> <span class="hl com">/* Dataspace dimensions */</span> <span class="hl kwb">const</span> hsize_t chunk_dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">25</span><span class="hl opt">};</span> <span class="hl com">/* Chunk dimensions */</span> hsize_t dset_size<span class="hl opt">;</span> <span class="hl com">/* Dataset size */</span> <span class="hl kwb">size_t</span> i<span class="hl opt">,</span> j<span class="hl opt">;</span> <span class="hl com">/* Local index variables */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"dataset filter 'can apply' callback"</span><span class="hl opt">);</span> <span class="hl com">/* Create dcpl with special filter */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't create dcpl</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_dims<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't set chunk sizes</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Zregister</span><span class="hl opt">(</span>H5Z_CAN_APPLY_TEST<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't register 'can apply' filter</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* The filter is mandate. */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_filter</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> H5Z_FILTER_CAN_APPLY_TEST<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">0</span><span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't set bogus filter</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* Create the data space */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't open dataspace</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Create new dataset */</span> <span class="hl com">/* (Should fail because the 'can apply' function should indicate inappropriate</span> <span class="hl com"> * combination. And the filter is mandate.) */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_CAN_APPLY_NAME<span class="hl opt">,</span> H5T_NATIVE_DOUBLE<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dsid <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Shouldn't have created dataset!</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* (Should fail because the 'can apply' function should fail) */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_CAN_APPLY_NAME<span class="hl opt">,</span> H5T_NATIVE_FLOAT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dsid <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Shouldn't have created dataset!</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Create new dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_CAN_APPLY_NAME<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't create dataset</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Write data */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> points_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Error writing dataset data</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Flush the file (to clear the cache) */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fflush</span><span class="hl opt">(</span>file<span class="hl opt">,</span> H5F_SCOPE_GLOBAL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Error flushing file</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Query the dataset's size on disk */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dset_size <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dsid<span class="hl opt">)) ==</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Error querying dataset size</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Verify that the size indicates data is uncompressed */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span><span class="hl kwd">H5Tget_size</span><span class="hl opt">(</span>H5T_NATIVE_INT<span class="hl opt">) *</span> dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] *</span> dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]) !=</span> dset_size<span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Incorrect dataset size: %lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>dset_size<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Read data */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> check_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Error reading dataset data</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Compare data */</span> <span class="hl com">/* Check that the values read are the same as the values written */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>points<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] !=</span> check<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %lu,%lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)(</span>i<span class="hl opt">), (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)(</span>j<span class="hl opt">));</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At original: %d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> points<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At returned: %d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> check<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/* Close dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't close dataset</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Close dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't close dataspace</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Close dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't close dcpl</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_can_apply() */</span> <span class="hl com">/* This message derives from H5Z */</span> <span class="hl kwb">const</span> H5Z_class2_t H5Z_CAN_APPLY_TEST2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {{</span> H5Z_CLASS_T_VERS<span class="hl opt">,</span> H5Z_FILTER_CAN_APPLY_TEST2<span class="hl opt">,</span> <span class="hl com">/* Filter id number */</span> <span class="hl num">1</span><span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> <span class="hl str">"can_apply_test"</span><span class="hl opt">,</span> <span class="hl com">/* Filter name for debugging */</span> can_apply_bogus<span class="hl opt">,</span> <span class="hl com">/* The "can apply" callback */</span> NULL<span class="hl opt">,</span> <span class="hl com">/* The "set local" callback */</span> filter_bogus3<span class="hl opt">,</span> <span class="hl com">/* The actual filter function */</span> <span class="hl opt">}};</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_can_apply2</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests library behavior when an optional filter indicates</span> <span class="hl com"> * it can't apply to certain combinations of creation</span> <span class="hl com"> * parameters. The filter function FILTER_BOGUS3 does nothing</span> <span class="hl com"> * than returning a failure. Because the filter is optional,</span> <span class="hl com"> * the library skips the filter even though the CAN_APPLY_BOGUS</span> <span class="hl com"> * indicates the datatype DOUBLE can't apply to the dataset.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Raymond Lu</span> <span class="hl com"> * 4 August 2010</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_can_apply2</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t dsid<span class="hl opt">;</span> <span class="hl com">/* Dataset ID */</span> hid_t sid<span class="hl opt">;</span> <span class="hl com">/* Dataspace ID */</span> hid_t dcpl<span class="hl opt">;</span> <span class="hl com">/* Dataspace creation property list ID */</span> <span class="hl kwb">const</span> hsize_t dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span>DSET_DIM1<span class="hl opt">,</span> DSET_DIM2<span class="hl opt">};</span> <span class="hl com">/* Dataspace dimensions */</span> <span class="hl kwb">const</span> hsize_t chunk_dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">25</span><span class="hl opt">};</span> <span class="hl com">/* Chunk dimensions */</span> hsize_t dset_size<span class="hl opt">;</span> <span class="hl com">/* Dataset size */</span> <span class="hl kwb">size_t</span> i<span class="hl opt">,</span> j<span class="hl opt">;</span> <span class="hl com">/* Local index variables */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"dataset filter 'can apply' callback second"</span><span class="hl opt">);</span> <span class="hl com">/* Create dcpl with special filter */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't create dcpl</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_dims<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't set chunk sizes</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Zregister</span><span class="hl opt">(</span>H5Z_CAN_APPLY_TEST2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't register 'can apply' filter</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* The filter is optional. */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_filter</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> H5Z_FILTER_CAN_APPLY_TEST2<span class="hl opt">,</span> H5Z_FLAG_OPTIONAL<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">0</span><span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't set bogus filter</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* Create the data space */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't open dataspace</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Create new dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_CAN_APPLY_NAME2<span class="hl opt">,</span> H5T_NATIVE_DOUBLE<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't create dataset</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Write data */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> points_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Error writing dataset data</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Flush the file (to clear the cache) */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fflush</span><span class="hl opt">(</span>file<span class="hl opt">,</span> H5F_SCOPE_GLOBAL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Error flushing file</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Query the dataset's size on disk */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dset_size <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dsid<span class="hl opt">)) ==</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Error querying dataset size</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Verify that the size indicates data is uncompressed */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span><span class="hl kwd">H5Tget_size</span><span class="hl opt">(</span>H5T_NATIVE_DOUBLE<span class="hl opt">) *</span> dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] *</span> dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]) !=</span> dset_size<span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Incorrect dataset size: %lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>dset_size<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Read data */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> check_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Error reading dataset data</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Compare data */</span> <span class="hl com">/* Check that the values read are the same as the values written */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>points<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] !=</span> check<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %lu,%lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)(</span>i<span class="hl opt">), (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)(</span>j<span class="hl opt">));</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At original: %d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> points<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At returned: %d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> check<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/* Close dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't close dataset</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Close dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't close dataspace</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Close dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't close dcpl</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_can_apply2() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_optional_filters</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests that H5Dcreate2 will not fail when a combination of</span> <span class="hl com"> * type, space, etc... doesn't work for a filter and filter is</span> <span class="hl com"> * optional.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: SUCCEED</span> <span class="hl com"> * Failure: FAIL</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Binh-Minh Ribler</span> <span class="hl com"> * 24 July 2020</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_optional_filters</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">unsigned int</span> level <span class="hl opt">=</span> <span class="hl num">9</span><span class="hl opt">;</span> <span class="hl kwb">unsigned int</span> cd_values<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span>level<span class="hl opt">};</span> <span class="hl kwb">size_t</span> cd_nelmts <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> hsize_t dim1d<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> <span class="hl com">/* Dataspace dimensions */</span> hid_t dsid <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> <span class="hl com">/* Dataset ID */</span> hid_t sid <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> <span class="hl com">/* Dataspace ID */</span> hid_t strtid <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> <span class="hl com">/* Datatype ID for string */</span> hid_t vlentid <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> <span class="hl com">/* Datatype ID for vlen */</span> hid_t dcplid <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> <span class="hl com">/* Dataspace creation property list ID */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"dataset with optional filters"</span><span class="hl opt">);</span> <span class="hl com">/* Create dcpl with special filter */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcplid <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create the datatype */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>strtid <span class="hl opt">=</span> <span class="hl kwd">H5Tcreate</span><span class="hl opt">(</span>H5T_STRING<span class="hl opt">,</span> H5T_VARIABLE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create the data space */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate</span><span class="hl opt">(</span>H5S_SCALAR<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* The filter is optional. */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_filter</span><span class="hl opt">(</span>dcplid<span class="hl opt">,</span> H5Z_FILTER_DEFLATE<span class="hl opt">,</span> H5Z_FLAG_OPTIONAL<span class="hl opt">,</span> cd_nelmts<span class="hl opt">,</span> cd_values<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataset with optional filter */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_OPTIONAL_SCALAR<span class="hl opt">,</span> strtid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcplid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close datatype */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>strtid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set dataspace dimensions */</span> dim1d<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> DIM1<span class="hl opt">;</span> <span class="hl com">/* Create a non-scalar dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> dim1d<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create a vlen datatype */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>vlentid <span class="hl opt">=</span> <span class="hl kwd">H5Tvlen_create</span><span class="hl opt">(</span>H5T_NATIVE_INT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataset with optional filter */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_OPTIONAL_VLEN<span class="hl opt">,</span> vlentid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcplid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close datatype */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>vlentid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcplid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcplid<span class="hl opt">);</span> <span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>strtid<span class="hl opt">);</span> <span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>vlentid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_optional_filters() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_can_apply_szip</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests library behavior when szip filter indicates it can't</span> <span class="hl com"> * apply to certain combinations of creation parameters</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Quincey Koziol</span> <span class="hl com"> * Monday, April 7, 2003</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_can_apply_szip</span><span class="hl opt">(</span>hid_t <span class="hl ppc">#ifndef H5_HAVE_FILTER_SZIP</span> H5_ATTR_UNUSED <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_SZIP */</span><span class="hl ppc"></span> file<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_SZIP</span> hid_t dsid<span class="hl opt">;</span> <span class="hl com">/* Dataset ID */</span> hid_t sid<span class="hl opt">;</span> <span class="hl com">/* Dataspace ID */</span> hid_t dcpl<span class="hl opt">;</span> <span class="hl com">/* Dataspace creation property list ID */</span> <span class="hl kwb">unsigned</span> szip_options_mask <span class="hl opt">=</span> H5_SZIP_NN_OPTION_MASK<span class="hl opt">;</span> <span class="hl kwb">unsigned</span> szip_pixels_per_block<span class="hl opt">;</span> <span class="hl kwb">const</span> hsize_t dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">500</span><span class="hl opt">,</span> <span class="hl num">4096</span><span class="hl opt">};</span> <span class="hl com">/* Dataspace dimensions */</span> <span class="hl kwb">const</span> hsize_t dims2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">4</span><span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">};</span> <span class="hl com">/* Dataspace dimensions */</span> <span class="hl kwb">const</span> hsize_t chunk_dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">250</span><span class="hl opt">,</span> <span class="hl num">2048</span><span class="hl opt">};</span> <span class="hl com">/* Chunk dimensions */</span> <span class="hl kwb">const</span> hsize_t chunk_dims2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">};</span> <span class="hl com">/* Chunk dimensions */</span> herr_t ret<span class="hl opt">;</span> <span class="hl com">/* Status value */</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_SZIP */</span><span class="hl ppc"></span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"dataset szip filter 'can apply' callback"</span><span class="hl opt">);</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_SZIP</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">h5_szip_can_encode</span><span class="hl opt">() ==</span> <span class="hl num">1</span><span class="hl opt">) {</span> <span class="hl com">/* Create the data space */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't open dataspace</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Create dcpl with special filter */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't create dcpl</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_dims<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't set chunk sizes</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Set (invalid at property set time) szip parameters */</span> szip_pixels_per_block <span class="hl opt">=</span> <span class="hl num">3</span><span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Pset_szip</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> szip_options_mask<span class="hl opt">,</span> szip_pixels_per_block<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Shouldn't be able to set szip filter</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* Set (invalid at property set time) szip parameters */</span> szip_pixels_per_block <span class="hl opt">=</span> <span class="hl num">512</span><span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Pset_szip</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> szip_options_mask<span class="hl opt">,</span> szip_pixels_per_block<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Shouldn't be able to set szip filter</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* Set (invalid at dataset creation time) szip parameters */</span> szip_pixels_per_block <span class="hl opt">=</span> <span class="hl num">2</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_szip</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> szip_options_mask<span class="hl opt">,</span> szip_pixels_per_block<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't set szip filter</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* Create new dataset */</span> <span class="hl com">/* (Should succeed; according to the new algorithm, scanline should be reset</span> <span class="hl com"> to 2*128 satisfying 'maximum blocks per scanline' condition) */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_CAN_APPLY_SZIP_NAME<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dsid <span class="hl opt"><=</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Should have created dataset!</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Close dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't close dataset</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Close dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't close dataspace</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Close dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't close dcpl</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Create another data space */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dims2<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't open dataspace</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Create dcpl with special filter */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't create dcpl</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_dims2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't set chunk sizes</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Set (invalid at dataset creation time) szip parameters */</span> szip_pixels_per_block <span class="hl opt">=</span> <span class="hl num">32</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_szip</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> szip_options_mask<span class="hl opt">,</span> szip_pixels_per_block<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't set szip filter</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* Create new dataset */</span> <span class="hl com">/* (Should fail because the 'can apply' filter should indicate inappropriate combination) */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_CAN_APPLY_SZIP_NAME<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dsid <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Shouldn't have created dataset!</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Close dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't close dataspace</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Close dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't close dcpl</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwd">SKIPPED</span><span class="hl opt">();</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" Szip encoding is not enabled."</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl ppc">#else</span> <span class="hl com">/* H5_HAVE_FILTER_SZIP */</span><span class="hl ppc"></span> <span class="hl kwd">SKIPPED</span><span class="hl opt">();</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" Szip filter is not enabled."</span><span class="hl opt">);</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_SZIP */</span><span class="hl ppc"></span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_SZIP</span> error<span class="hl opt">:</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_SZIP */</span><span class="hl ppc"></span> <span class="hl opt">}</span> <span class="hl com">/* end test_can_apply_szip() */</span> <span class="hl com">/* This message derives from H5Z */</span> <span class="hl kwb">const</span> H5Z_class2_t H5Z_SET_LOCAL_TEST<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {{</span> H5Z_CLASS_T_VERS<span class="hl opt">,</span> H5Z_FILTER_SET_LOCAL_TEST<span class="hl opt">,</span> <span class="hl com">/* Filter id number */</span> <span class="hl num">1</span><span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> <span class="hl str">"set_local_test"</span><span class="hl opt">,</span> <span class="hl com">/* Filter name for debugging */</span> NULL<span class="hl opt">,</span> <span class="hl com">/* The "can apply" callback */</span> set_local_bogus2<span class="hl opt">,</span> <span class="hl com">/* The "set local" callback */</span> filter_bogus2<span class="hl opt">,</span> <span class="hl com">/* The actual filter function */</span> <span class="hl opt">}};</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_set_local</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests library behavior for "set local" filter callback</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Quincey Koziol</span> <span class="hl com"> * Monday, April 7, 2003</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_set_local</span><span class="hl opt">(</span>hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> hid_t file<span class="hl opt">;</span> <span class="hl com">/* File ID */</span> hid_t dsid<span class="hl opt">;</span> <span class="hl com">/* Dataset ID */</span> hid_t sid<span class="hl opt">;</span> <span class="hl com">/* Dataspace ID */</span> hid_t dcpl<span class="hl opt">;</span> <span class="hl com">/* Dataspace creation property list ID */</span> <span class="hl kwb">const</span> hsize_t dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span>DSET_DIM1<span class="hl opt">,</span> DSET_DIM2<span class="hl opt">};</span> <span class="hl com">/* Dataspace dimensions */</span> <span class="hl kwb">const</span> hsize_t chunk_dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">25</span><span class="hl opt">};</span> <span class="hl com">/* Chunk dimensions */</span> hsize_t dset_size<span class="hl opt">;</span> <span class="hl com">/* Dataset size */</span> <span class="hl kwb">unsigned</span> cd_values<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span>BOGUS2_PARAM_1<span class="hl opt">,</span> BOGUS2_PARAM_2<span class="hl opt">};</span> <span class="hl com">/* Parameters for Bogus2 filter */</span> <span class="hl kwb">size_t</span> i<span class="hl opt">,</span> j<span class="hl opt">;</span> <span class="hl com">/* Local index variables */</span> <span class="hl kwb">double</span> n<span class="hl opt">;</span> <span class="hl com">/* Local index variables */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"dataset filter 'set local' callback"</span><span class="hl opt">);</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">5</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> filename<span class="hl opt">);</span> <span class="hl com">/* Initialize the integer & floating-point dataset */</span> n <span class="hl opt">=</span> <span class="hl num">1.0</span><span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> DSET_DIM1<span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> DSET_DIM2<span class="hl opt">;</span> j<span class="hl opt">++) {</span> points<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] = (</span><span class="hl kwb">int</span><span class="hl opt">)</span>n<span class="hl opt">++;</span> points_dbl<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] =</span> <span class="hl num">1.5</span> <span class="hl opt">*</span> n<span class="hl opt">++;</span> <span class="hl opt">}</span> <span class="hl com">/* Open file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>file <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't open file</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* Create dcpl with special filter */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't create dcpl</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_dims<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't set chunk sizes</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Zregister</span><span class="hl opt">(</span>H5Z_SET_LOCAL_TEST<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't register 'set local' filter</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_filter</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> H5Z_FILTER_SET_LOCAL_TEST<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>BOGUS2_PERM_NPARMS<span class="hl opt">,</span> cd_values<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't set bogus2 filter</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* Create the data space */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't open dataspace</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Create new dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_SET_LOCAL_NAME<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't create dataset</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Write data */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> points_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Error writing dataset data</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Close dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't close dataset</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Create new dataset */</span> <span class="hl com">/* (Shouldn't get modified by output filter) */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_SET_LOCAL_NAME_2<span class="hl opt">,</span> H5T_NATIVE_DOUBLE<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't create dataset</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Write data */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_DOUBLE<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> points_dbl_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Error writing dataset data</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Close dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't close dataset</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Close dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't close dataspace</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Close dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't close dcpl</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Close file (flushes & empties cache) */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't close file</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Open file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>file <span class="hl opt">=</span> <span class="hl kwd">H5Fopen</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_RDWR<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't open file</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* Re-open dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_SET_LOCAL_NAME<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't open dataset</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Query the dataset's size on disk */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dset_size <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dsid<span class="hl opt">)) ==</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Error querying dataset size</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Verify that the size indicates data is uncompressed */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span><span class="hl kwd">H5Tget_size</span><span class="hl opt">(</span>H5T_NATIVE_INT<span class="hl opt">) *</span> dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] *</span> dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]) !=</span> dset_size<span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Incorrect dataset size: %lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>dset_size<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Read data */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> check_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Error reading dataset data</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Compare data */</span> <span class="hl com">/* Check that the values read are the modified version of what was written */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>points<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] + (</span><span class="hl kwb">int</span><span class="hl opt">)</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">)) !=</span> check<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %lu,%lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)(</span>i<span class="hl opt">), (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)(</span>j<span class="hl opt">));</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At original: %d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> points<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At returned: %d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> check<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/* Close dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't close dataset</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Re-open second dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_SET_LOCAL_NAME_2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't open dataset</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Query the dataset's size on disk */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dset_size <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dsid<span class="hl opt">)) ==</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Error querying dataset size</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Verify that the size indicates data is uncompressed */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span><span class="hl kwd">H5Tget_size</span><span class="hl opt">(</span>H5T_NATIVE_DOUBLE<span class="hl opt">) *</span> dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] *</span> dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]) !=</span> dset_size<span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Incorrect dataset size: %lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>dset_size<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Read data */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_DOUBLE<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> check_dbl_data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Error reading dataset data</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Compare data */</span> <span class="hl com">/* Check that the values read are the modified version of what was written */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++) {</span> <span class="hl com">/* If the difference between two values is greater than 0.001%, they're</span> <span class="hl com"> * considered not equal. */</span> <span class="hl kwa">if</span> <span class="hl opt">(!</span><span class="hl kwd">H5_DBL_REL_EQUAL</span><span class="hl opt">(</span>points_dbl<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">],</span> check_dbl<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">],</span> <span class="hl num">0.00001</span><span class="hl opt">)) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Read different values than written.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At index %lu,%lu</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)(</span>i<span class="hl opt">), (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)(</span>j<span class="hl opt">));</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At original: %f</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> points_dbl<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At returned: %f</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> check_dbl<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/* Close dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't close dataset</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Close file */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Can't close file</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_set_local() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_compare_dcpl</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Verifies that if the same DCPL was used to create two</span> <span class="hl com"> * datasets, the DCPLs retrieved from each dataset should</span> <span class="hl com"> * compare equal.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Quincey Koziol</span> <span class="hl com"> * Wednesday, January 7, 2004</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_compare_dcpl</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t dsid <span class="hl opt">= (-</span><span class="hl num">1</span><span class="hl opt">);</span> <span class="hl com">/* Dataset ID */</span> hid_t sid <span class="hl opt">= (-</span><span class="hl num">1</span><span class="hl opt">);</span> <span class="hl com">/* Dataspace ID */</span> hid_t dcpl <span class="hl opt">= (-</span><span class="hl num">1</span><span class="hl opt">);</span> <span class="hl com">/* Dataspace creation property list ID */</span> hid_t dcpl1 <span class="hl opt">= (-</span><span class="hl num">1</span><span class="hl opt">),</span> dcpl2 <span class="hl opt">= (-</span><span class="hl num">1</span><span class="hl opt">);</span> <span class="hl com">/* Dataspace creation property list IDs from datasets */</span> <span class="hl kwb">const</span> hsize_t dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">500</span><span class="hl opt">,</span> <span class="hl num">4096</span><span class="hl opt">};</span> <span class="hl com">/* Dataspace dimensions */</span> <span class="hl kwb">const</span> hsize_t chunk_dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">250</span><span class="hl opt">,</span> <span class="hl num">2048</span><span class="hl opt">};</span> <span class="hl com">/* Chunk dimensions */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"comparing dataset creation property lists"</span><span class="hl opt">);</span> <span class="hl com">/* Create the data space */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dcpl with special filter */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_dims<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set gzip parameter (if available) */</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_DEFLATE</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_deflate</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">9</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_DEFLATE */</span><span class="hl ppc"></span> <span class="hl com">/* Create first dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_COMPARE_DCPL_NAME<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get copy of dataset's dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl1 <span class="hl opt">=</span> <span class="hl kwd">H5Dget_create_plist</span><span class="hl opt">(</span>dsid<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create second dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_COMPARE_DCPL_NAME_2<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get copy of dataset's dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl2 <span class="hl opt">=</span> <span class="hl kwd">H5Dget_create_plist</span><span class="hl opt">(</span>dsid<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Compare dataset creation property lists */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pequal</span><span class="hl opt">(</span>dcpl1<span class="hl opt">,</span> dcpl2<span class="hl opt">) <=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dataset creation property lists */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl1<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl1<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl2<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_compare_dcpl() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_copy_dcpl</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Verifies whether the copy of dataset creation property</span> <span class="hl com"> * list works. It tests the DCPL for chunked layout with</span> <span class="hl com"> * filter and for contiguous layout with external storage.</span> <span class="hl com"> * (Please see #1608 in Bugzilla)</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Raymond Lu</span> <span class="hl com"> * 28 January 2010</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_copy_dcpl</span><span class="hl opt">(</span>hid_t file<span class="hl opt">,</span> hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t dsid1 <span class="hl opt">= (-</span><span class="hl num">1</span><span class="hl opt">),</span> dsid2 <span class="hl opt">= (-</span><span class="hl num">1</span><span class="hl opt">);</span> <span class="hl com">/* Dataset ID */</span> hid_t new_dsid1 <span class="hl opt">= (-</span><span class="hl num">1</span><span class="hl opt">),</span> new_dsid2 <span class="hl opt">= (-</span><span class="hl num">1</span><span class="hl opt">);</span> <span class="hl com">/* Dataset ID */</span> hid_t sid <span class="hl opt">= (-</span><span class="hl num">1</span><span class="hl opt">);</span> <span class="hl com">/* Dataspace ID */</span> hid_t dcpl <span class="hl opt">= (-</span><span class="hl num">1</span><span class="hl opt">);</span> <span class="hl com">/* Dataset creation property list ID */</span> hid_t dcpl1 <span class="hl opt">= (-</span><span class="hl num">1</span><span class="hl opt">),</span> dcpl2 <span class="hl opt">= (-</span><span class="hl num">1</span><span class="hl opt">);</span> <span class="hl com">/* Copies of creation property list IDs */</span> hid_t dcpl1_copy <span class="hl opt">= (-</span><span class="hl num">1</span><span class="hl opt">),</span> dcpl2_copy <span class="hl opt">= (-</span><span class="hl num">1</span><span class="hl opt">);</span> <span class="hl com">/* Copies of creation property list IDs */</span> <span class="hl kwb">const</span> hsize_t dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">500</span><span class="hl opt">,</span> <span class="hl num">4096</span><span class="hl opt">};</span> <span class="hl com">/* Dataspace dimensions */</span> <span class="hl kwb">const</span> hsize_t chunk_dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">250</span><span class="hl opt">,</span> <span class="hl num">2048</span><span class="hl opt">};</span> <span class="hl com">/* Chunk dimensions */</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> hid_t new_file <span class="hl opt">= (-</span><span class="hl num">1</span><span class="hl opt">);</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"copying dataset creation property lists"</span><span class="hl opt">);</span> <span class="hl com">/* Create the data space */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dcpl with special filter */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_dims<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fletcher32</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create first dataset of chunking with filter */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid1 <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_COPY_DCPL_NAME_1<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid1<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Reopen the first dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid1 <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_COPY_DCPL_NAME_1<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the copy of dataset's creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl1 <span class="hl opt">=</span> <span class="hl kwd">H5Dget_create_plist</span><span class="hl opt">(</span>dsid1<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl1_copy <span class="hl opt">=</span> <span class="hl kwd">H5Pcopy</span><span class="hl opt">(</span>dcpl1<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid1<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Change the DCPL for contiguous layout with external storage. The size of the reserved</span> <span class="hl com"> * space in the external file is the size of the dataset - 500*4096*sizeof(int).</span> <span class="hl com"> * There's no need to clean up the external file since the library doesn't create it</span> <span class="hl com"> * until the data is written to it. */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_layout</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> H5D_CONTIGUOUS<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Premove_filter</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> H5Z_FILTER_FLETCHER32<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_external</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> COPY_DCPL_EXTFILE_NAME<span class="hl opt">, (</span>off_t<span class="hl opt">)</span><span class="hl num">0</span><span class="hl opt">, (</span>hsize_t<span class="hl opt">)(</span><span class="hl num">500</span> <span class="hl opt">*</span> <span class="hl num">4096</span> <span class="hl opt">*</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">))) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create second dataset of contiguous layout with external storage */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid2 <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_COPY_DCPL_NAME_2<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Reopen the second dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid2 <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_COPY_DCPL_NAME_2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get copy of dataset's dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl2 <span class="hl opt">=</span> <span class="hl kwd">H5Dget_create_plist</span><span class="hl opt">(</span>dsid2<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl2_copy <span class="hl opt">=</span> <span class="hl kwd">H5Pcopy</span><span class="hl opt">(</span>dcpl2<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create a second file and create 2 datasets with the copies of the DCPLs in the first</span> <span class="hl com"> * file. Test whether the copies of DCPLs work. */</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">13</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> filename<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>new_file <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>new_dsid1 <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>new_file<span class="hl opt">,</span> DSET_COPY_DCPL_NAME_1<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl1_copy<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>new_dsid2 <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>new_file<span class="hl opt">,</span> DSET_COPY_DCPL_NAME_2<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl2_copy<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close datasets */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>new_dsid1<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>new_dsid2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close the second file */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>new_file<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dataset creation property lists */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl1<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl1_copy<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl2_copy<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid1<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid2<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>new_dsid1<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>new_dsid2<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl1<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl2<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl1_copy<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl2_copy<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_copy_dcpl() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_filter_delete</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests deletion of filters from a dataset creation property list</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Pedro Vicente</span> <span class="hl com"> * Monday, January 26, 2004</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_filter_delete</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_DEFLATE</span> H5Z_filter_t filtn<span class="hl opt">;</span> <span class="hl com">/* filter identification number */</span> hid_t dsid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* dataset ID */</span> hid_t sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* dataspace ID */</span> hid_t dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* dataset creation property list ID */</span> hid_t dcpl1 <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* dataset creation property list ID */</span> hsize_t dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">20</span><span class="hl opt">,</span> <span class="hl num">20</span><span class="hl opt">};</span> <span class="hl com">/* dataspace dimensions */</span> hsize_t chunk_dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">10</span><span class="hl opt">,</span> <span class="hl num">10</span><span class="hl opt">};</span> <span class="hl com">/* chunk dimensions */</span> <span class="hl kwb">int</span> nfilters<span class="hl opt">;</span> <span class="hl com">/* number of filters in DCPL */</span> <span class="hl kwb">unsigned</span> flags<span class="hl opt">;</span> <span class="hl com">/* flags for filter */</span> herr_t ret<span class="hl opt">;</span> <span class="hl com">/* generic return value */</span> <span class="hl kwb">int</span> i<span class="hl opt">;</span> <span class="hl ppc">#endif</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"filter deletion"</span><span class="hl opt">);</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_DEFLATE</span> <span class="hl com">/* create the data space */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* create dcpl */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_dims<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fletcher32</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_deflate</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">6</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_shuffle</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* create a dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> <span class="hl str">"dsetdel"</span><span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* get copy of dataset's dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl1 <span class="hl opt">=</span> <span class="hl kwd">H5Dget_create_plist</span><span class="hl opt">(</span>dsid<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * delete the deflate filter</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl com">/* delete the deflate filter */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Premove_filter</span><span class="hl opt">(</span>dcpl1<span class="hl opt">,</span> H5Z_FILTER_DEFLATE<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* get information about filters */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>nfilters <span class="hl opt">=</span> <span class="hl kwd">H5Pget_nfilters</span><span class="hl opt">(</span>dcpl1<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* check if filter was deleted */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> nfilters<span class="hl opt">;</span> i<span class="hl opt">++) {</span> filtn <span class="hl opt">=</span> <span class="hl kwd">H5Pget_filter2</span><span class="hl opt">(</span>dcpl1<span class="hl opt">, (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>i<span class="hl opt">,</span> NULL<span class="hl opt">,</span> NULL<span class="hl opt">,</span> NULL<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">0</span><span class="hl opt">,</span> NULL<span class="hl opt">,</span> NULL<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>H5Z_FILTER_DEFLATE <span class="hl opt">==</span> filtn<span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* try to get the info for the deflate filter */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Pget_filter_by_id2</span><span class="hl opt">(</span>dcpl1<span class="hl opt">,</span> H5Z_FILTER_DEFLATE<span class="hl opt">, &</span>flags<span class="hl opt">,</span> NULL<span class="hl opt">,</span> NULL<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">0</span><span class="hl opt">,</span> NULL<span class="hl opt">,</span> NULL<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Shouldn't have deleted filter!</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* try to delete the deflate filter again */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Premove_filter</span><span class="hl opt">(</span>dcpl1<span class="hl opt">,</span> H5Z_FILTER_DEFLATE<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Shouldn't have deleted filter!</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * delete all filters</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl com">/* delete all filters */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Premove_filter</span><span class="hl opt">(</span>dcpl1<span class="hl opt">,</span> H5Z_FILTER_ALL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* get information about filters */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>nfilters <span class="hl opt">=</span> <span class="hl kwd">H5Pget_nfilters</span><span class="hl opt">(</span>dcpl1<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* check if filters were deleted */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>nfilters<span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/*----------------------------------------------------------------------</span> <span class="hl com"> * close</span> <span class="hl com"> *----------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl com">/* clean up objects used for this test */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl1<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl1<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl ppc">#else</span> <span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span>file<span class="hl opt">;</span> <span class="hl com">/* Silence compiler */</span> <span class="hl kwd">SKIPPED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> <span class="hl ppc">#endif</span> <span class="hl opt">}</span> <span class="hl com">/* end test_filter_delete() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: auxread_fdata</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: reads a dataset "NAME" from FID</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Pedro Vicente</span> <span class="hl com"> * Monday, March 8, 2004</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">auxread_fdata</span><span class="hl opt">(</span>hid_t fid<span class="hl opt">,</span> <span class="hl kwb">const char</span> <span class="hl opt">*</span>name<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t dset_id <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* dataset ID */</span> hid_t dcpl_id <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* dataset creation property list ID */</span> hid_t space_id <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* space ID */</span> hid_t ftype_id <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* file data type ID */</span> hid_t mtype_id <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* memory data type ID */</span> <span class="hl kwb">size_t</span> msize<span class="hl opt">;</span> <span class="hl com">/* memory size of memory type */</span> <span class="hl kwb">void</span> <span class="hl opt">*</span> buf <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl com">/* data buffer */</span> hsize_t nelmts<span class="hl opt">;</span> <span class="hl com">/* number of elements in dataset */</span> <span class="hl kwb">int</span> rank<span class="hl opt">;</span> <span class="hl com">/* rank of dataset */</span> hsize_t dims<span class="hl opt">[</span>H5S_MAX_RANK<span class="hl opt">];</span> <span class="hl com">/* dimensions of dataset */</span> <span class="hl kwb">int</span> i<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dset_id <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> name<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>space_id <span class="hl opt">=</span> <span class="hl kwd">H5Dget_space</span><span class="hl opt">(</span>dset_id<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>ftype_id <span class="hl opt">=</span> <span class="hl kwd">H5Dget_type</span><span class="hl opt">(</span>dset_id<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl_id <span class="hl opt">=</span> <span class="hl kwd">H5Dget_create_plist</span><span class="hl opt">(</span>dset_id<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>rank <span class="hl opt">=</span> <span class="hl kwd">H5Sget_simple_extent_ndims</span><span class="hl opt">(</span>space_id<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">HDmemset</span><span class="hl opt">(</span>dims<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span> dims<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sget_simple_extent_dims</span><span class="hl opt">(</span>space_id<span class="hl opt">,</span> dims<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> nelmts <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> rank<span class="hl opt">;</span> i<span class="hl opt">++)</span> nelmts <span class="hl opt">*=</span> dims<span class="hl opt">[</span>i<span class="hl opt">];</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>mtype_id <span class="hl opt">=</span> <span class="hl kwd">H5Tget_native_type</span><span class="hl opt">(</span>ftype_id<span class="hl opt">,</span> H5T_DIR_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>msize <span class="hl opt">=</span> <span class="hl kwd">H5Tget_size</span><span class="hl opt">(</span>mtype_id<span class="hl opt">)) ==</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>nelmts<span class="hl opt">) {</span> buf <span class="hl opt">= (</span><span class="hl kwb">void</span> <span class="hl opt">*)</span><span class="hl kwd">HDmalloc</span><span class="hl opt">((</span><span class="hl kwb">size_t</span><span class="hl opt">)(</span>nelmts <span class="hl opt">*</span> msize<span class="hl opt">));</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>buf <span class="hl opt">==</span> NULL<span class="hl opt">) {</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">"cannot read into memory</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dset_id<span class="hl opt">,</span> mtype_id<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> buf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl_id<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space_id<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dset_id<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>buf<span class="hl opt">)</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>buf<span class="hl opt">);</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl_id<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>space_id<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dset_id<span class="hl opt">);</span> <span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>ftype_id<span class="hl opt">);</span> <span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>mtype_id<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>buf<span class="hl opt">)</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>buf<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end auxread_fdata() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_filters_endianess</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Reads/writes data with filters (big-endian/little-endian data)</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Pedro Vicente</span> <span class="hl com"> * Monday, March 8, 2004</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_filters_endianess</span><span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span> <span class="hl opt">{</span> hid_t fid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* file ID */</span> hid_t dsid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* dataset ID */</span> hid_t sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* dataspace ID */</span> hid_t dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* dataset creation property list ID */</span> <span class="hl kwb">const char</span> <span class="hl opt">*</span>data_file <span class="hl opt">=</span> <span class="hl kwd">H5_get_srcdir_filename</span><span class="hl opt">(</span><span class="hl str">"test_filters_le.h5"</span><span class="hl opt">);</span> <span class="hl com">/* Corrected test file name */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"filters with big-endian/little-endian data"</span><span class="hl opt">);</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * step 1: open a file written on a little-endian machine</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl com">/* open */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fopen</span><span class="hl opt">(</span>data_file<span class="hl opt">,</span> H5F_ACC_RDONLY<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* read */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">auxread_fdata</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset"</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* close */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * step 2: open a file written on a big-endian machine</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl com">/* compose the name of the file to open, using the srcdir, if appropriate */</span> data_file <span class="hl opt">=</span> <span class="hl kwd">H5_get_srcdir_filename</span><span class="hl opt">(</span><span class="hl str">"test_filters_be.h5"</span><span class="hl opt">);</span> <span class="hl com">/* Corrected test file name */</span> <span class="hl com">/* open */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fopen</span><span class="hl opt">(</span>data_file<span class="hl opt">,</span> H5F_ACC_RDONLY<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* read */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">auxread_fdata</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset"</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* close */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_filters_endianess() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_zero_dims</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests read/writes to zero-sized extendible datasets</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Quincey Koziol</span> <span class="hl com"> * Tuesday, July 27, 2004</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_zero_dims</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t s <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> d <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hid_t s2 <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> d2 <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> dcpl2 <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hsize_t dzero <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">,</span> dmax <span class="hl opt">=</span> H5S_UNLIMITED<span class="hl opt">,</span> csize <span class="hl opt">=</span> <span class="hl num">5</span><span class="hl opt">;</span> hsize_t dzero2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">};</span> hsize_t dmax2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span>H5S_UNLIMITED<span class="hl opt">,</span> H5S_UNLIMITED<span class="hl opt">};</span> hsize_t csize2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">5</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">};</span> hid_t fapl<span class="hl opt">;</span> <span class="hl com">/* File access property list */</span> H5D_chunk_index_t idx_type<span class="hl opt">;</span> <span class="hl com">/* Dataset chunk index type */</span> H5F_libver_t low<span class="hl opt">;</span> <span class="hl com">/* File format low bound */</span> herr_t ret<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"I/O on datasets with zero-sized dims"</span><span class="hl opt">);</span> <span class="hl com">/* Get the file's file access property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fapl <span class="hl opt">=</span> <span class="hl kwd">H5Fget_access_plist</span><span class="hl opt">(</span>file<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get library format */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_libver_bounds</span><span class="hl opt">(</span>fapl<span class="hl opt">, &</span>low<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close FAPL */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>fapl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/*</span> <span class="hl com"> * One-dimensional dataset</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>s <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">, &</span>dzero<span class="hl opt">, &</span>dmax<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Try creating chunked dataset with undefined chunk dimensions */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_layout</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> H5D_CHUNKED<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> d <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> ZERODIM_DATASET<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> s<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>d <span class="hl opt">></span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>d<span class="hl opt">);</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"created dataset with undefined chunk dimensions"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Try creating chunked dataset with zero-sized chunk dimensions */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">, &</span>dzero<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">></span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"set zero-sized chunk dimensions"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create the zero-sized extendible dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">, &</span>csize<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>d <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> ZERODIM_DATASET<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> s<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the chunk index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>d<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>low <span class="hl opt">==</span> H5F_LIBVER_LATEST<span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_EARRAY<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using extensible array as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">else if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_BTREE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v1 B-tree as index"</span><span class="hl opt">);</span> <span class="hl com">/* Various no-op writes */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>d<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> s<span class="hl opt">,</span> s<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, (</span><span class="hl kwb">void</span> <span class="hl opt">*)</span><span class="hl num">911</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>d<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> s<span class="hl opt">,</span> s<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>d<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, (</span><span class="hl kwb">void</span> <span class="hl opt">*)</span><span class="hl num">911</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>d<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Various no-op reads */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>d<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> s<span class="hl opt">,</span> s<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, (</span><span class="hl kwb">void</span> <span class="hl opt">*)</span><span class="hl num">911</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>d<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> s<span class="hl opt">,</span> s<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>d<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, (</span><span class="hl kwb">void</span> <span class="hl opt">*)</span><span class="hl num">911</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>d<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>d<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>s<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/*</span> <span class="hl com"> * Two-dimensional dataset</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>s2 <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dzero2<span class="hl opt">,</span> dmax2<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Try creating chunked dataset with undefined chunk dimensions */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl2 <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_layout</span><span class="hl opt">(</span>dcpl2<span class="hl opt">,</span> H5D_CHUNKED<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> d2 <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> ZERODIM_DATASET2<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> s2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>d2 <span class="hl opt">></span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>d2<span class="hl opt">);</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"created dataset with undefined chunk dimensions"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Try creating chunked dataset with zero-sized chunk dimensions */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl2<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> dzero2<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">></span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"set zero-sized chunk dimensions"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Write to the zero-sized extendible dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl2 <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl2<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> csize2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>d2 <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> ZERODIM_DATASET2<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> s2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the chunk index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>d2<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>low <span class="hl opt">==</span> H5F_LIBVER_LATEST<span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_BT2<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v2 B-tree as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">else if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_BTREE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v1 B-tree as index"</span><span class="hl opt">);</span> <span class="hl com">/* Just a no-op */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>d2<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> s2<span class="hl opt">,</span> s2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, (</span><span class="hl kwb">void</span> <span class="hl opt">*)</span><span class="hl num">911</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>d2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>s2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>fapl<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>d<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>s<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl2<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>d2<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>s2<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_zero_dims() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_missing_chunk</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests that reads from chunked dataset with undefined fill value and</span> <span class="hl com"> * not all chunks written don't overwrite data in user's buffer</span> <span class="hl com"> * for missing chunks.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Quincey Koziol</span> <span class="hl com"> * Tuesday, August 25, 2004</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_missing_chunk</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t d <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> did2 <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset IDs */</span> hid_t dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> dcpl2 <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset creation property IDs */</span> hid_t s <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> sid2 <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataspace ID */</span> hsize_t hs_start<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">],</span> hs_stride<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">],</span> hs_count<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">],</span> hs_block<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> <span class="hl com">/* Hyperslab setting */</span> hsize_t hs_start2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">],</span> hs_stride2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">],</span> hs_count2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">],</span> hs_block2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Hyperslab setting */</span> <span class="hl com">/* Buffers for reading/writing dataset */</span> <span class="hl kwb">int</span> <span class="hl opt">*</span> wdata <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">int</span> <span class="hl opt">*</span> rdata <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">int</span> <span class="hl opt">**</span>wdata2 <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">int</span> <span class="hl opt">**</span>rdata2 <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">int</span> <span class="hl opt">*</span> wdata2_bytes <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">int</span> <span class="hl opt">*</span> rdata2_bytes <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl com">/* Setting for 1-D dataset */</span> hsize_t dsize <span class="hl opt">=</span> <span class="hl num">100</span><span class="hl opt">,</span> dmax <span class="hl opt">=</span> H5S_UNLIMITED<span class="hl opt">;</span> hsize_t csize <span class="hl opt">=</span> <span class="hl num">5</span><span class="hl opt">;</span> <span class="hl com">/* Setting for 2-D dataset */</span> hsize_t dsize2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">100</span><span class="hl opt">,</span> <span class="hl num">100</span><span class="hl opt">},</span> dmax2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span>H5S_UNLIMITED<span class="hl opt">,</span> H5S_UNLIMITED<span class="hl opt">};</span> hsize_t csize2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">5</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">};</span> <span class="hl kwb">size_t</span> u<span class="hl opt">,</span> i<span class="hl opt">,</span> j<span class="hl opt">;</span> <span class="hl com">/* Local Index variable */</span> hid_t fapl <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> <span class="hl com">/* File access property list */</span> H5F_libver_t low<span class="hl opt">;</span> <span class="hl com">/* File format low bound */</span> H5D_chunk_index_t idx_type<span class="hl opt">,</span> idx_type2<span class="hl opt">;</span> <span class="hl com">/* Dataset chunk index types */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"Read dataset with unwritten chunk & undefined fill value"</span><span class="hl opt">);</span> <span class="hl com">/* Set up data arrays */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>wdata <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">*)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>MISSING_CHUNK_DIM<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>rdata <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">*)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>MISSING_CHUNK_DIM<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>wdata2_bytes <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">*)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>MISSING_CHUNK_DIM <span class="hl opt">*</span> MISSING_CHUNK_DIM<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>wdata2 <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">**)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>MISSING_CHUNK_DIM<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>wdata2_bytes<span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> MISSING_CHUNK_DIM<span class="hl opt">;</span> i<span class="hl opt">++)</span> wdata2<span class="hl opt">[</span>i<span class="hl opt">] =</span> wdata2_bytes <span class="hl opt">+ (</span>i <span class="hl opt">*</span> MISSING_CHUNK_DIM<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>rdata2_bytes <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">*)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>MISSING_CHUNK_DIM <span class="hl opt">*</span> MISSING_CHUNK_DIM<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>rdata2 <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">**)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>MISSING_CHUNK_DIM<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>rdata2_bytes<span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> MISSING_CHUNK_DIM<span class="hl opt">;</span> i<span class="hl opt">++)</span> rdata2<span class="hl opt">[</span>i<span class="hl opt">] =</span> rdata2_bytes <span class="hl opt">+ (</span>i <span class="hl opt">*</span> MISSING_CHUNK_DIM<span class="hl opt">);</span> <span class="hl com">/* Get the file's file access property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fapl <span class="hl opt">=</span> <span class="hl kwd">H5Fget_access_plist</span><span class="hl opt">(</span>file<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get library format */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_libver_bounds</span><span class="hl opt">(</span>fapl<span class="hl opt">, &</span>low<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close FAPL */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>fapl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize data for 1-D dataset */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>u <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> u <span class="hl opt"><</span> MISSING_CHUNK_DIM<span class="hl opt">;</span> u<span class="hl opt">++) {</span> wdata<span class="hl opt">[</span>u<span class="hl opt">] = (</span><span class="hl kwb">int</span><span class="hl opt">)</span>u<span class="hl opt">;</span> rdata<span class="hl opt">[</span>u<span class="hl opt">] =</span> <span class="hl num">911</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/* Initialize data for 2-D dataset */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> MISSING_CHUNK_DIM<span class="hl opt">;</span> i<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> MISSING_CHUNK_DIM<span class="hl opt">;</span> j<span class="hl opt">++) {</span> wdata2<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] = (</span><span class="hl kwb">int</span><span class="hl opt">)(</span>j <span class="hl opt">+ (</span>i <span class="hl opt">*</span> MISSING_CHUNK_DIM<span class="hl opt">));</span> rdata2<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] =</span> <span class="hl num">911</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/* Create dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>s <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">, &</span>dsize<span class="hl opt">, &</span>dmax<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid2 <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dsize2<span class="hl opt">,</span> dmax2<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl2 <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set to chunked */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">, &</span>csize<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl2<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> csize2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Undefine fill value */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fill_value</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fill_value</span><span class="hl opt">(</span>dcpl2<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create the 1-D & 2-D datasets */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>d <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> MISSING_CHUNK_DATASET<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> s<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>did2 <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> MISSING_CHUNK_DATASET2<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the chunk index types */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>d<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>did2<span class="hl opt">, &</span>idx_type2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>low <span class="hl opt">==</span> H5F_LIBVER_LATEST<span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_EARRAY<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using Extensible Array as index"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type2 <span class="hl opt">!=</span> H5D_CHUNK_IDX_BT2<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v2 B-tree as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_BTREE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v1 B-tree as index"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type2 <span class="hl opt">!=</span> H5D_CHUNK_IDX_BTREE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v1 B-tree as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* Select elements in every other chunk for 1-D dataset */</span> hs_start<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">0</span><span class="hl opt">;</span> hs_stride<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">10</span><span class="hl opt">;</span> hs_count<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">10</span><span class="hl opt">;</span> hs_block<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">5</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>s<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> hs_start<span class="hl opt">,</span> hs_stride<span class="hl opt">,</span> hs_count<span class="hl opt">,</span> hs_block<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Select elements in every other chunk for 2-D dataset */</span> hs_start2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> hs_start2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">0</span><span class="hl opt">;</span> hs_stride2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> hs_stride2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">10</span><span class="hl opt">;</span> hs_count2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> hs_count2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">10</span><span class="hl opt">;</span> hs_block2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> hs_block2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">5</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid2<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> hs_start2<span class="hl opt">,</span> hs_stride2<span class="hl opt">,</span> hs_count2<span class="hl opt">,</span> hs_block2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Write selected data to the datasets */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>d<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> s<span class="hl opt">,</span> s<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> wdata<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>did2<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid2<span class="hl opt">,</span> sid2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> wdata2_bytes<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read all data from the datasets */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>d<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> rdata<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>did2<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> rdata2_bytes<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Validata values read for the 1-D dataset */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>u <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> u <span class="hl opt"><</span> MISSING_CHUNK_DIM<span class="hl opt">;</span> u<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>u <span class="hl opt">%</span> <span class="hl num">10</span><span class="hl opt">) >=</span> <span class="hl num">5</span><span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>rdata<span class="hl opt">[</span>u<span class="hl opt">] !=</span> <span class="hl num">911</span><span class="hl opt">) {</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Incorrect value, rdata[%u]=%d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">, (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>u<span class="hl opt">,</span> rdata<span class="hl opt">[</span>u<span class="hl opt">]);</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>rdata<span class="hl opt">[</span>u<span class="hl opt">] !=</span> wdata<span class="hl opt">[</span>u<span class="hl opt">]) {</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Incorrect value, wdata[%u]=%d, rdata[%u]=%d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">, (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>u<span class="hl opt">,</span> wdata<span class="hl opt">[</span>u<span class="hl opt">], (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>u<span class="hl opt">,</span> rdata<span class="hl opt">[</span>u<span class="hl opt">]);</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/* Validata values read for the 2-D dataset */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> MISSING_CHUNK_DIM<span class="hl opt">;</span> i<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> MISSING_CHUNK_DIM<span class="hl opt">;</span> j<span class="hl opt">++) {</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>i <span class="hl opt">%</span> <span class="hl num">10</span><span class="hl opt">) >=</span> <span class="hl num">5</span> <span class="hl opt">|| (</span>j <span class="hl opt">%</span> <span class="hl num">10</span><span class="hl opt">) >=</span> <span class="hl num">5</span><span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>rdata2<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] !=</span> <span class="hl num">911</span><span class="hl opt">) {</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Incorrect value, rdata2[%u][%u] = %d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">, (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>i<span class="hl opt">,</span> <span class="hl opt">(</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>j<span class="hl opt">,</span> rdata2<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]);</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>rdata2<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] !=</span> wdata2<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]) {</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Incorrect value, wdata2[%u][%u] = %d, rdata2[%u][%u] = %d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">, (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>i<span class="hl opt">, (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>j<span class="hl opt">,</span> wdata2<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">], (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>i<span class="hl opt">, (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>j<span class="hl opt">,</span> rdata2<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">]);</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/* Close everything */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>s<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>d<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rdata<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>wdata<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rdata2<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>wdata2<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rdata2_bytes<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>wdata2_bytes<span class="hl opt">);</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>fapl<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl2<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>d<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did2<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>s<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid2<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rdata<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>wdata<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rdata2<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>wdata2<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rdata2_bytes<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>wdata2_bytes<span class="hl opt">);</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_missing_chunk() */</span> <span class="hl com">/* Using Euclid's algorithm, find the greatest common divisor (GCD) of</span> <span class="hl com"> * the two arguments and return it.</span> <span class="hl com"> *</span> <span class="hl com"> * The GCD is negative if the arguments have opposite sign. Otherwise,</span> <span class="hl com"> * it is positive.</span> <span class="hl com"> *</span> <span class="hl com"> * If either argument is zero, then the result is undefined.</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> H5_ATTR_CONST <span class="hl kwb">long</span> <span class="hl kwd">gcd</span><span class="hl opt">(</span><span class="hl kwb">long</span> l0<span class="hl opt">,</span> <span class="hl kwb">long</span> r0<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">long</span> magnitude<span class="hl opt">,</span> remainder<span class="hl opt">;</span> hbool_t negative <span class="hl opt">= ((</span>l0 <span class="hl opt"><</span> <span class="hl num">0</span><span class="hl opt">) != (</span>r0 <span class="hl opt"><</span> <span class="hl num">0</span><span class="hl opt">));</span> <span class="hl kwb">long</span> l <span class="hl opt">=</span> <span class="hl kwd">HDlabs</span><span class="hl opt">(</span>l0<span class="hl opt">),</span> r <span class="hl opt">=</span> <span class="hl kwd">HDlabs</span><span class="hl opt">(</span>r0<span class="hl opt">);</span> <span class="hl kwa">do</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>l <span class="hl opt"><</span> r<span class="hl opt">) {</span> r <span class="hl opt">=</span> r <span class="hl opt">%</span> l<span class="hl opt">;</span> remainder <span class="hl opt">=</span> r<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl com">/* r <= l */</span> <span class="hl opt">{</span> l <span class="hl opt">=</span> l <span class="hl opt">%</span> r<span class="hl opt">;</span> remainder <span class="hl opt">=</span> l<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl kwa">while</span> <span class="hl opt">(</span>remainder <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">);</span> magnitude <span class="hl opt">= (</span>l <span class="hl opt">==</span> <span class="hl num">0</span><span class="hl opt">)</span> ? r <span class="hl opt">:</span> l<span class="hl opt">;</span> <span class="hl kwa">return</span> negative ? <span class="hl opt">-</span>magnitude <span class="hl opt">:</span> magnitude<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* Choose a random offset into an array `nelts` elements long, and store</span> <span class="hl com"> * it at `offsetp`. The offset will be in the range [0, nelts - 1].</span> <span class="hl com"> * Also choose a random increment, `inc`, that "generates" all</span> <span class="hl com"> * indices in [0, nelts - 1] when it is added to itself repeatedly.</span> <span class="hl com"> * That is, the range of the discrete function `f(i) = (i * inc)</span> <span class="hl com"> * mod nelts` on the domain [0, nelts - 1] is [0, nelts - 1]. Store</span> <span class="hl com"> * `inc` at `incp`.</span> <span class="hl com"> *</span> <span class="hl com"> * If `nelts <= 0`, results are undefined.</span> <span class="hl com"> */</span> <span class="hl kwb">static void</span> <span class="hl kwd">make_random_offset_and_increment</span><span class="hl opt">(</span><span class="hl kwb">long</span> nelts<span class="hl opt">,</span> <span class="hl kwb">long</span> <span class="hl opt">*</span>offsetp<span class="hl opt">,</span> <span class="hl kwb">long</span> <span class="hl opt">*</span>incp<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">long</span> inc<span class="hl opt">;</span> <span class="hl kwb">long</span> maxinc<span class="hl opt">;</span> <span class="hl kwd">HDassert</span><span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt"><</span> nelts<span class="hl opt">);</span> <span class="hl opt">*</span>offsetp <span class="hl opt">=</span> <span class="hl kwd">HDrandom</span><span class="hl opt">() %</span> nelts<span class="hl opt">;</span> <span class="hl com">/* `maxinc` is chosen so that for any `x` in [0, nelts - 1],</span> <span class="hl com"> * `x + maxinc` does not overflow a long.</span> <span class="hl com"> */</span> maxinc <span class="hl opt">=</span> <span class="hl kwd">MIN</span><span class="hl opt">(</span>nelts <span class="hl opt">-</span> <span class="hl num">1</span><span class="hl opt">,</span> LONG_MAX <span class="hl opt">-</span> nelts<span class="hl opt">);</span> <span class="hl com">/* Choose a random number in [1, nelts - 1]. If its greatest divisor</span> <span class="hl com"> * in common with `nelts` is 1, then it will "generate" the additive ring</span> <span class="hl com"> * [0, nelts - 1], so let it be our increment. Otherwise, choose a new</span> <span class="hl com"> * number.</span> <span class="hl com"> */</span> <span class="hl kwa">do</span> <span class="hl opt">{</span> inc <span class="hl opt">=</span> <span class="hl num">1</span> <span class="hl opt">+</span> <span class="hl kwd">HDrandom</span><span class="hl opt">() %</span> maxinc<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">while</span> <span class="hl opt">(</span><span class="hl kwd">gcd</span><span class="hl opt">(</span>inc<span class="hl opt">,</span> nelts<span class="hl opt">) !=</span> <span class="hl num">1</span><span class="hl opt">);</span> <span class="hl opt">*</span>incp <span class="hl opt">=</span> inc<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_random_chunks_real</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests that write/read on randomly selected chunks</span> <span class="hl com"> *</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Christian Chilan</span> <span class="hl com"> * Monday, March 26, 2007</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_random_chunks_real</span><span class="hl opt">(</span><span class="hl kwb">const char</span> <span class="hl opt">*</span>testname<span class="hl opt">,</span> hbool_t early_alloc<span class="hl opt">,</span> hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> hid_t s <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> m <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> d <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> file <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwb">int</span> wbuf<span class="hl opt">[</span>NPOINTS<span class="hl opt">],</span> rbuf<span class="hl opt">[</span>NPOINTS<span class="hl opt">],</span> check2<span class="hl opt">[</span><span class="hl num">20</span><span class="hl opt">][</span><span class="hl num">20</span><span class="hl opt">];</span> hsize_t coord<span class="hl opt">[</span>NPOINTS<span class="hl opt">][</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl kwb">const</span> hsize_t dsize<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">100</span><span class="hl opt">,</span> <span class="hl num">100</span><span class="hl opt">},</span> dmax<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span>H5S_UNLIMITED<span class="hl opt">,</span> H5S_UNLIMITED<span class="hl opt">},</span> csize<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">10</span><span class="hl opt">,</span> <span class="hl num">10</span><span class="hl opt">},</span> nsize<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">200</span><span class="hl opt">,</span> <span class="hl num">200</span><span class="hl opt">};</span> hsize_t fixed_dmax<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">1000</span><span class="hl opt">,</span> <span class="hl num">1000</span><span class="hl opt">};</span> hsize_t msize<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span>NPOINTS<span class="hl opt">};</span> <span class="hl kwb">const char</span> dname<span class="hl opt">[] =</span> <span class="hl str">"dataset"</span><span class="hl opt">;</span> <span class="hl kwb">int</span> chunk_row<span class="hl opt">,</span> chunk_col<span class="hl opt">;</span> <span class="hl kwb">size_t</span> i<span class="hl opt">,</span> j<span class="hl opt">;</span> H5D_chunk_index_t idx_type<span class="hl opt">;</span> <span class="hl com">/* Dataset chunk index type */</span> H5F_libver_t low<span class="hl opt">;</span> <span class="hl com">/* File format low bound */</span> <span class="hl kwb">long</span> ofs<span class="hl opt">,</span> inc<span class="hl opt">;</span> <span class="hl kwb">long</span> rows<span class="hl opt">;</span> <span class="hl kwb">long</span> cols<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span>testname<span class="hl opt">);</span> <span class="hl kwd">HDassert</span><span class="hl opt">(</span>NPOINTS <span class="hl opt"><</span> <span class="hl num">100</span><span class="hl opt">);</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">6</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> filename<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_libver_bounds</span><span class="hl opt">(</span>fapl<span class="hl opt">, &</span>low<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create file for first test */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>file <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>s <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dsize<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set chunked layout */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> csize<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set early allocation time for one dataset; the other dataset is using default alloc time */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>early_alloc<span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_alloc_time</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> H5D_ALLOC_TIME_EARLY<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>d <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> dname<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> s<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialization of check array for repeated coordinates */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> dsize<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] /</span> csize<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> dsize<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] /</span> csize<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++)</span> check2<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] =</span> <span class="hl num">0</span><span class="hl opt">;</span> rows <span class="hl opt">= (</span><span class="hl kwb">long</span><span class="hl opt">)(</span>dsize<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] /</span> csize<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]);</span> cols <span class="hl opt">= (</span><span class="hl kwb">long</span><span class="hl opt">)(</span>dsize<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] /</span> csize<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]);</span> <span class="hl kwd">make_random_offset_and_increment</span><span class="hl opt">(</span>rows <span class="hl opt">*</span> cols<span class="hl opt">, &</span>ofs<span class="hl opt">, &</span>inc<span class="hl opt">);</span> <span class="hl com">/* Generate random point coordinates. Only one point is selected per chunk */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> NPOINTS<span class="hl opt">;</span> i<span class="hl opt">++) {</span> <span class="hl kwd">H5_CHECKED_ASSIGN</span><span class="hl opt">(</span>chunk_row<span class="hl opt">,</span> <span class="hl kwb">int</span><span class="hl opt">,</span> ofs <span class="hl opt">/</span> cols<span class="hl opt">,</span> <span class="hl kwb">long</span><span class="hl opt">);</span> <span class="hl kwd">H5_CHECKED_ASSIGN</span><span class="hl opt">(</span>chunk_col<span class="hl opt">,</span> <span class="hl kwb">int</span><span class="hl opt">,</span> ofs <span class="hl opt">%</span> cols<span class="hl opt">,</span> <span class="hl kwb">long</span><span class="hl opt">);</span> ofs <span class="hl opt">= (</span>ofs <span class="hl opt">+</span> inc<span class="hl opt">) % (</span>rows <span class="hl opt">*</span> cols<span class="hl opt">);</span> <span class="hl kwd">HDassert</span><span class="hl opt">(!</span>check2<span class="hl opt">[</span>chunk_row<span class="hl opt">][</span>chunk_col<span class="hl opt">]);</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">] =</span> check2<span class="hl opt">[</span>chunk_row<span class="hl opt">][</span>chunk_col<span class="hl opt">] =</span> chunk_row <span class="hl opt">+</span> chunk_col <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">;</span> coord<span class="hl opt">[</span>i<span class="hl opt">][</span><span class="hl num">0</span><span class="hl opt">] = (</span>hsize_t<span class="hl opt">)</span>chunk_row <span class="hl opt">*</span> csize<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> coord<span class="hl opt">[</span>i<span class="hl opt">][</span><span class="hl num">1</span><span class="hl opt">] = (</span>hsize_t<span class="hl opt">)</span>chunk_col <span class="hl opt">*</span> csize<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> <span class="hl opt">}</span> <span class="hl com">/* Create dataspace for write buffer */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>m <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> msize<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Select the random points for writing */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_elements</span><span class="hl opt">(</span>s<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>NPOINTS<span class="hl opt">, (</span><span class="hl kwb">const</span> hsize_t <span class="hl opt">*)</span>coord<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Write into dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>d<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> m<span class="hl opt">,</span> s<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> wbuf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close resources*/</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>s<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>m<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>d<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open first file again */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>file <span class="hl opt">=</span> <span class="hl kwd">H5Fopen</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_RDWR<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>d <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> dname<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the chunk index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>d<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>low <span class="hl opt">==</span> H5F_LIBVER_LATEST<span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>early_alloc<span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_NONE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using Non-Index as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_FARRAY<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using Fixed Array as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> <span class="hl opt">}</span> <span class="hl kwa">else if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_BTREE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v1 B-tree as index"</span><span class="hl opt">);</span> <span class="hl com">/* Get dataset dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>s <span class="hl opt">=</span> <span class="hl kwd">H5Dget_space</span><span class="hl opt">(</span>d<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataspace for read buffer */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>m <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> msize<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Select the random points for reading */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_elements</span><span class="hl opt">(</span>s<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>NPOINTS<span class="hl opt">, (</span><span class="hl kwb">const</span> hsize_t <span class="hl opt">*)</span>coord<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read from dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>d<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> m<span class="hl opt">,</span> s<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> rbuf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify that written and read data are the same */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> NPOINTS<span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>rbuf<span class="hl opt">[</span>i<span class="hl opt">] !=</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">]) {</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Incorrect value, wbuf[%u]=%d, rbuf[%u]=%d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">, (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>i<span class="hl opt">,</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">], (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>i<span class="hl opt">,</span> rbuf<span class="hl opt">[</span>i<span class="hl opt">]);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" coord[%u] = {%lu, %lu}</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>i<span class="hl opt">, (</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>coord<span class="hl opt">[</span>i<span class="hl opt">][</span><span class="hl num">0</span><span class="hl opt">],</span> <span class="hl opt">(</span><span class="hl kwb">unsigned long</span><span class="hl opt">)</span>coord<span class="hl opt">[</span>i<span class="hl opt">][</span><span class="hl num">1</span><span class="hl opt">]);</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Close resources */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>s<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>m<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>d<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create second file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>file <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataspace with unlimited maximum dimensions */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>early_alloc<span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>s <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dsize<span class="hl opt">,</span> fixed_dmax<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">else if</span> <span class="hl opt">((</span>s <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dsize<span class="hl opt">,</span> dmax<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set chunked layout */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> csize<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set early allocation time for one dataset; the other dataset is using default alloc time */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>early_alloc<span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_alloc_time</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> H5D_ALLOC_TIME_EARLY<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>d <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> dname<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> s<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the chunk index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>d<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>low <span class="hl opt">==</span> H5F_LIBVER_LATEST<span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>early_alloc<span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_NONE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using implicit indexing"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">else if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_BT2<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v2 B-tree as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">else if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_BTREE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v1 B-tree as index"</span><span class="hl opt">);</span> <span class="hl com">/* Extend both dimensions of the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dset_extent</span><span class="hl opt">(</span>d<span class="hl opt">,</span> nsize<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Reset the dataset dataspace to new dimensions */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sset_extent_simple</span><span class="hl opt">(</span>s<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> nsize<span class="hl opt">,</span> dmax<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize check buffer for repeated coordinates */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> nsize<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] /</span> csize<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> nsize<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] /</span> csize<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++)</span> check2<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] =</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwd">H5_CHECKED_ASSIGN</span><span class="hl opt">(</span>rows<span class="hl opt">,</span> <span class="hl kwb">int</span><span class="hl opt">,</span> nsize<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] /</span> csize<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">],</span> <span class="hl kwb">long</span><span class="hl opt">);</span> <span class="hl kwd">H5_CHECKED_ASSIGN</span><span class="hl opt">(</span>cols<span class="hl opt">,</span> <span class="hl kwb">int</span><span class="hl opt">,</span> nsize<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] /</span> csize<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">],</span> <span class="hl kwb">long</span><span class="hl opt">);</span> <span class="hl kwd">make_random_offset_and_increment</span><span class="hl opt">(</span>rows <span class="hl opt">*</span> cols<span class="hl opt">, &</span>ofs<span class="hl opt">, &</span>inc<span class="hl opt">);</span> <span class="hl com">/* Generate random point coordinates. Only one point is selected per chunk */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> NPOINTS<span class="hl opt">;</span> i<span class="hl opt">++) {</span> <span class="hl kwd">H5_CHECKED_ASSIGN</span><span class="hl opt">(</span>chunk_row<span class="hl opt">,</span> <span class="hl kwb">int</span><span class="hl opt">,</span> ofs <span class="hl opt">/</span> cols<span class="hl opt">,</span> <span class="hl kwb">long</span><span class="hl opt">);</span> <span class="hl kwd">H5_CHECKED_ASSIGN</span><span class="hl opt">(</span>chunk_col<span class="hl opt">,</span> <span class="hl kwb">int</span><span class="hl opt">,</span> ofs <span class="hl opt">%</span> cols<span class="hl opt">,</span> <span class="hl kwb">long</span><span class="hl opt">);</span> ofs <span class="hl opt">= (</span>ofs <span class="hl opt">+</span> inc<span class="hl opt">) % (</span>rows <span class="hl opt">*</span> cols<span class="hl opt">);</span> <span class="hl kwd">HDassert</span><span class="hl opt">(!</span>check2<span class="hl opt">[</span>chunk_row<span class="hl opt">][</span>chunk_col<span class="hl opt">]);</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">] =</span> check2<span class="hl opt">[</span>chunk_row<span class="hl opt">][</span>chunk_col<span class="hl opt">] =</span> chunk_row <span class="hl opt">+</span> chunk_col <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">;</span> coord<span class="hl opt">[</span>i<span class="hl opt">][</span><span class="hl num">0</span><span class="hl opt">] = (</span>hsize_t<span class="hl opt">)</span>chunk_row <span class="hl opt">*</span> csize<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> coord<span class="hl opt">[</span>i<span class="hl opt">][</span><span class="hl num">1</span><span class="hl opt">] = (</span>hsize_t<span class="hl opt">)</span>chunk_col <span class="hl opt">*</span> csize<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> <span class="hl opt">}</span> <span class="hl com">/* Create dataspace for write buffer */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>m <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> msize<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Select the random points for writing */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_elements</span><span class="hl opt">(</span>s<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>NPOINTS<span class="hl opt">, (</span><span class="hl kwb">const</span> hsize_t <span class="hl opt">*)</span>coord<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Write into dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>d<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> m<span class="hl opt">,</span> s<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> wbuf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close resources */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>s<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>m<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>d<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open second file again */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>file <span class="hl opt">=</span> <span class="hl kwd">H5Fopen</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_RDWR<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>d <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> dname<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get dataset dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>s <span class="hl opt">=</span> <span class="hl kwd">H5Dget_space</span><span class="hl opt">(</span>d<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataspace for read buffer */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>m <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> msize<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Select the random points for reading */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_elements</span><span class="hl opt">(</span>s<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>NPOINTS<span class="hl opt">, (</span><span class="hl kwb">const</span> hsize_t <span class="hl opt">*)</span>coord<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read from dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>d<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> m<span class="hl opt">,</span> s<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> rbuf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify that written and read data are the same */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> NPOINTS<span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>rbuf<span class="hl opt">[</span>i<span class="hl opt">] !=</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">]) {</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Incorrect value, wbuf[%u]=%d, rbuf[%u]=%d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">, (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>i<span class="hl opt">,</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">], (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>i<span class="hl opt">,</span> rbuf<span class="hl opt">[</span>i<span class="hl opt">]);</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Close resources */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>s<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>m<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>d<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create third file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>file <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataspace with fixed maximum dimensions */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>s <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dsize<span class="hl opt">,</span> fixed_dmax<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set chunked layout */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> csize<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set early allocation time for one dataset; the other dataset is using default alloc time */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>early_alloc<span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_alloc_time</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> H5D_ALLOC_TIME_EARLY<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>d <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> dname<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> s<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the chunk index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>d<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>low <span class="hl opt">==</span> H5F_LIBVER_LATEST<span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>early_alloc<span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_NONE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using Non-Index as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_FARRAY<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using Fixed Array as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> <span class="hl opt">}</span> <span class="hl kwa">else if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_BTREE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v1 B-tree as index"</span><span class="hl opt">);</span> <span class="hl com">/* Extend both dimensions of the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dset_extent</span><span class="hl opt">(</span>d<span class="hl opt">,</span> nsize<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Reset the dataset dataspace to new dimensions */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sset_extent_simple</span><span class="hl opt">(</span>s<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> nsize<span class="hl opt">,</span> dmax<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize check buffer for repeated coordinates */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> nsize<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] /</span> csize<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> nsize<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] /</span> csize<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++)</span> check2<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] =</span> <span class="hl num">0</span><span class="hl opt">;</span> rows <span class="hl opt">= (</span><span class="hl kwb">long</span><span class="hl opt">)(</span>nsize<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] /</span> csize<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]);</span> cols <span class="hl opt">= (</span><span class="hl kwb">long</span><span class="hl opt">)(</span>nsize<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] /</span> csize<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]);</span> <span class="hl kwd">make_random_offset_and_increment</span><span class="hl opt">(</span>rows <span class="hl opt">*</span> cols<span class="hl opt">, &</span>ofs<span class="hl opt">, &</span>inc<span class="hl opt">);</span> <span class="hl com">/* Generate random point coordinates. Only one point is selected per chunk */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> NPOINTS<span class="hl opt">;</span> i<span class="hl opt">++) {</span> <span class="hl kwd">H5_CHECKED_ASSIGN</span><span class="hl opt">(</span>chunk_row<span class="hl opt">,</span> <span class="hl kwb">int</span><span class="hl opt">,</span> ofs <span class="hl opt">/</span> cols<span class="hl opt">,</span> <span class="hl kwb">long</span><span class="hl opt">);</span> <span class="hl kwd">H5_CHECKED_ASSIGN</span><span class="hl opt">(</span>chunk_col<span class="hl opt">,</span> <span class="hl kwb">int</span><span class="hl opt">,</span> ofs <span class="hl opt">%</span> cols<span class="hl opt">,</span> <span class="hl kwb">long</span><span class="hl opt">);</span> ofs <span class="hl opt">= (</span>ofs <span class="hl opt">+</span> inc<span class="hl opt">) % (</span>rows <span class="hl opt">*</span> cols<span class="hl opt">);</span> <span class="hl kwd">HDassert</span><span class="hl opt">(!</span>check2<span class="hl opt">[</span>chunk_row<span class="hl opt">][</span>chunk_col<span class="hl opt">]);</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">] =</span> check2<span class="hl opt">[</span>chunk_row<span class="hl opt">][</span>chunk_col<span class="hl opt">] =</span> chunk_row <span class="hl opt">+</span> chunk_col <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">;</span> coord<span class="hl opt">[</span>i<span class="hl opt">][</span><span class="hl num">0</span><span class="hl opt">] = (</span>hsize_t<span class="hl opt">)</span>chunk_row <span class="hl opt">*</span> csize<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> coord<span class="hl opt">[</span>i<span class="hl opt">][</span><span class="hl num">1</span><span class="hl opt">] = (</span>hsize_t<span class="hl opt">)</span>chunk_col <span class="hl opt">*</span> csize<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> <span class="hl opt">}</span> <span class="hl com">/* Create dataspace for write buffer */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>m <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> msize<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Select the random points for writing */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_elements</span><span class="hl opt">(</span>s<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>NPOINTS<span class="hl opt">, (</span><span class="hl kwb">const</span> hsize_t <span class="hl opt">*)</span>coord<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Write into dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>d<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> m<span class="hl opt">,</span> s<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> wbuf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close resources */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>s<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>m<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>d<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open third file again */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>file <span class="hl opt">=</span> <span class="hl kwd">H5Fopen</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_RDWR<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>d <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> dname<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get dataset dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>s <span class="hl opt">=</span> <span class="hl kwd">H5Dget_space</span><span class="hl opt">(</span>d<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataspace for read buffer */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>m <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> msize<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Select the random points for reading */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_elements</span><span class="hl opt">(</span>s<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span>NPOINTS<span class="hl opt">, (</span><span class="hl kwb">const</span> hsize_t <span class="hl opt">*)</span>coord<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read from dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>d<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> m<span class="hl opt">,</span> s<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> rbuf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify that written and read data are the same */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> NPOINTS<span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>rbuf<span class="hl opt">[</span>i<span class="hl opt">] !=</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">]) {</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Incorrect value, wbuf[%u]=%d, rbuf[%u]=%d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">, (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>i<span class="hl opt">,</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">], (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>i<span class="hl opt">,</span> rbuf<span class="hl opt">[</span>i<span class="hl opt">]);</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Close resources */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>s<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>m<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>d<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>s<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>m<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>d<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_random_chunks_real() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_random_chunks</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests that write/read on randomly selected chunks</span> <span class="hl com"> * First file:</span> <span class="hl com"> * One dataset has fixed dimensions without max. dims & H5D_ALLOC_TIME_EARLY</span> <span class="hl com"> * One dataset has fixed dimensions without max. dims & default alloc time</span> <span class="hl com"> * Second file:</span> <span class="hl com"> * One extendible dataset with unlimited max. dims & H5D_ALLOC_TIME_EARLY</span> <span class="hl com"> * One extendible dataset with unlimited max. dims & default alloc time</span> <span class="hl com"> * third file:</span> <span class="hl com"> * one extendible dataset with fixed max. dims & H5D_ALLOC_TIME_EARLY</span> <span class="hl com"> * one extendible dataset with fixed max. dims & default alloc time</span> <span class="hl com"> *</span> <span class="hl com"> * All the datasets in second & third files are extended before write/read operations</span> <span class="hl com"> *</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Christian Chilan</span> <span class="hl com"> * Monday, March 26, 2007</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_random_chunks</span><span class="hl opt">(</span>hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">int</span> nerrors <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl com">/* Errors in sub-tests */</span> nerrors <span class="hl opt">+=</span> <span class="hl kwd">test_random_chunks_real</span><span class="hl opt">(</span><span class="hl str">"Write/read on randomly selected chunks w/non-implicit index"</span><span class="hl opt">,</span> FALSE<span class="hl opt">,</span> fapl<span class="hl opt">);</span> nerrors <span class="hl opt">+=</span> <span class="hl kwd">test_random_chunks_real</span><span class="hl opt">(</span><span class="hl str">"Write/read on randomly selected chunks w/implicit index"</span><span class="hl opt">,</span> TRUE<span class="hl opt">,</span> fapl<span class="hl opt">);</span> <span class="hl kwa">return</span> nerrors<span class="hl opt">;</span> <span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_random_chunks() */</span> <span class="hl ppc">#ifndef H5_NO_DEPRECATED_SYMBOLS</span> <span class="hl com">/* Empty can_apply and set_local callbacks */</span> <span class="hl kwb">static</span> htri_t <span class="hl kwd">can_apply_deprec</span><span class="hl opt">(</span>hid_t H5_ATTR_UNUSED dcpl_id<span class="hl opt">,</span> hid_t H5_ATTR_UNUSED type_id<span class="hl opt">,</span> hid_t H5_ATTR_UNUSED space_id<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwa">return</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">set_local_deprec</span><span class="hl opt">(</span>hid_t H5_ATTR_UNUSED dcpl_id<span class="hl opt">,</span> hid_t H5_ATTR_UNUSED type_id<span class="hl opt">,</span> hid_t H5_ATTR_UNUSED space_id<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwa">return</span> <span class="hl opt">(</span>SUCCEED<span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* Old style H5Z_class_t, essentially a copy of the "bogus" filter */</span> <span class="hl kwb">const</span> H5Z_class1_t H5Z_DEPREC<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {{</span> H5Z_FILTER_DEPREC<span class="hl opt">,</span> <span class="hl com">/* Filter id number */</span> <span class="hl str">"deprec"</span><span class="hl opt">,</span> <span class="hl com">/* Filter name for debugging */</span> can_apply_deprec<span class="hl opt">,</span> <span class="hl com">/* The "can apply" callback */</span> set_local_deprec<span class="hl opt">,</span> <span class="hl com">/* The "set local" callback */</span> filter_bogus<span class="hl opt">,</span> <span class="hl com">/* The actual filter function */</span> <span class="hl opt">}};</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_deprec</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests deprecated API symbols</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Quincey Koziol</span> <span class="hl com"> * Monday, October 8, 2007</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_deprec</span><span class="hl opt">(</span>hid_t file<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t dataset<span class="hl opt">,</span> space<span class="hl opt">,</span> small_space<span class="hl opt">,</span> create_parms<span class="hl opt">,</span> dcpl<span class="hl opt">;</span> hsize_t dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">],</span> small_dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> hsize_t deprec_size<span class="hl opt">;</span> herr_t H5_ATTR_NDEBUG_UNUSED status<span class="hl opt">;</span> hsize_t csize<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"deprecated API routines"</span><span class="hl opt">);</span> <span class="hl com">/* Create the data space */</span> dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">256</span><span class="hl opt">;</span> dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">512</span><span class="hl opt">;</span> space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> NULL<span class="hl opt">);</span> <span class="hl kwd">HDassert</span><span class="hl opt">(</span>space <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl com">/* Create a small data space for compact dataset */</span> small_dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">16</span><span class="hl opt">;</span> small_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">8</span><span class="hl opt">;</span> small_space <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> small_dims<span class="hl opt">,</span> NULL<span class="hl opt">);</span> <span class="hl kwd">HDassert</span><span class="hl opt">(</span>space <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl com">/*</span> <span class="hl com"> * Create a dataset using the default dataset creation properties. We're</span> <span class="hl com"> * not sure what they are, so we won't check.</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate1</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_DEPREC_NAME<span class="hl opt">,</span> H5T_NATIVE_DOUBLE<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Close the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/*</span> <span class="hl com"> * Try creating a dataset that already exists. This should fail since a</span> <span class="hl com"> * dataset can only be created once. Temporarily turn off error</span> <span class="hl com"> * reporting.</span> <span class="hl com"> */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate1</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_DEFAULT_NAME<span class="hl opt">,</span> H5T_NATIVE_DOUBLE<span class="hl opt">,</span> space<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dataset <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" Library allowed overwrite of existing dataset."</span><span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/*</span> <span class="hl com"> * Open the dataset we created above and then close it. This is how</span> <span class="hl com"> * existing datasets are accessed.</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dopen1</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_DEPREC_NAME<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/*</span> <span class="hl com"> * Try opening a non-existent dataset. This should fail since new datasets</span> <span class="hl com"> * cannot be created with this function. Temporarily turn off error</span> <span class="hl com"> * reporting.</span> <span class="hl com"> */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dopen1</span><span class="hl opt">(</span>file<span class="hl opt">,</span> <span class="hl str">"does_not_exist"</span><span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dataset <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" Opened a non-existent dataset."</span><span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/*</span> <span class="hl com"> * Create a new dataset that uses chunked storage instead of the default</span> <span class="hl com"> * layout.</span> <span class="hl com"> */</span> create_parms <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">);</span> <span class="hl kwd">HDassert</span><span class="hl opt">(</span>create_parms <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl com">/* Add the deflate filter, if available */</span> <span class="hl ppc">#if defined H5_HAVE_FILTER_DEFLATE</span> <span class="hl opt">{</span> H5Z_filter_t filtn<span class="hl opt">;</span> <span class="hl com">/* filter identification number */</span> <span class="hl kwb">size_t</span> cd_nelmts <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Number of filter parameters */</span> <span class="hl kwb">unsigned</span> cd_value<span class="hl opt">;</span> <span class="hl com">/* Filter parameter */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_deflate</span><span class="hl opt">(</span>create_parms<span class="hl opt">,</span> <span class="hl num">6</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Check for the deflate filter */</span> filtn <span class="hl opt">=</span> <span class="hl kwd">H5Pget_filter1</span><span class="hl opt">(</span>create_parms<span class="hl opt">, (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span><span class="hl num">0</span><span class="hl opt">,</span> NULL<span class="hl opt">, &</span>cd_nelmts<span class="hl opt">, &</span>cd_value<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">0</span><span class="hl opt">,</span> NULL<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>H5Z_FILTER_DEFLATE <span class="hl opt">!=</span> filtn<span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">1</span> <span class="hl opt">!=</span> cd_nelmts<span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">6</span> <span class="hl opt">!=</span> cd_value<span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Check for the deflate filter */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_filter_by_id1</span><span class="hl opt">(</span>create_parms<span class="hl opt">,</span> H5Z_FILTER_DEFLATE<span class="hl opt">,</span> NULL<span class="hl opt">, &</span>cd_nelmts<span class="hl opt">, &</span>cd_value<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">0</span><span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">1</span> <span class="hl opt">!=</span> cd_nelmts<span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">6</span> <span class="hl opt">!=</span> cd_value<span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_DEFLATE */</span><span class="hl ppc"></span> <span class="hl com">/* Attempt to create a dataset with invalid chunk sizes */</span> csize<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] *</span> <span class="hl num">2</span><span class="hl opt">;</span> csize<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] *</span> <span class="hl num">2</span><span class="hl opt">;</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>create_parms<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> csize<span class="hl opt">);</span> <span class="hl kwd">HDassert</span><span class="hl opt">(</span>status <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">);</span> H5E_BEGIN_TRY <span class="hl opt">{</span> dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate1</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_DEPREC_NAME_CHUNKED<span class="hl opt">,</span> H5T_NATIVE_DOUBLE<span class="hl opt">,</span> space<span class="hl opt">,</span> create_parms<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dataset <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl kwd">H5_FAILED</span><span class="hl opt">();</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" Opened a dataset with incorrect chunking parameters."</span><span class="hl opt">);</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> csize<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">5</span><span class="hl opt">;</span> csize<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">100</span><span class="hl opt">;</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>create_parms<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> csize<span class="hl opt">);</span> <span class="hl kwd">HDassert</span><span class="hl opt">(</span>status <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate1</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_DEPREC_NAME_CHUNKED<span class="hl opt">,</span> H5T_NATIVE_DOUBLE<span class="hl opt">,</span> space<span class="hl opt">,</span> create_parms<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>create_parms<span class="hl opt">);</span> <span class="hl com">/*</span> <span class="hl com"> * Close the chunked dataset.</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/*</span> <span class="hl com"> * Open the dataset we created above and then close it. This is how</span> <span class="hl com"> * existing datasets are accessed.</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dopen1</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_DEPREC_NAME_CHUNKED<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/*</span> <span class="hl com"> * Create a compact dataset, then close it.</span> <span class="hl com"> */</span> create_parms <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">);</span> <span class="hl kwd">HDassert</span><span class="hl opt">(</span>create_parms <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">);</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Pset_layout</span><span class="hl opt">(</span>create_parms<span class="hl opt">,</span> H5D_COMPACT<span class="hl opt">);</span> <span class="hl kwd">HDassert</span><span class="hl opt">(</span>status <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">);</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Pset_alloc_time</span><span class="hl opt">(</span>create_parms<span class="hl opt">,</span> H5D_ALLOC_TIME_EARLY<span class="hl opt">);</span> <span class="hl kwd">HDassert</span><span class="hl opt">(</span>status <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate1</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_DEPREC_NAME_COMPACT<span class="hl opt">,</span> H5T_NATIVE_DOUBLE<span class="hl opt">,</span> small_space<span class="hl opt">,</span> create_parms<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>create_parms<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/*</span> <span class="hl com"> * Open the dataset we created above and then close it. This is how</span> <span class="hl com"> * existing datasets are accessed.</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dataset <span class="hl opt">=</span> <span class="hl kwd">H5Dopen1</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_DEPREC_NAME_COMPACT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dataset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Test H5Zregister with deprecated H5Z_class1_t */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> csize<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Zregister</span><span class="hl opt">(</span>H5Z_DEPREC<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_filter</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> H5Z_FILTER_DEPREC<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">0</span><span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">""</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">test_filter_internal</span><span class="hl opt">(</span>file<span class="hl opt">,</span> DSET_DEPREC_NAME_FILTER<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> DISABLE_FLETCHER32<span class="hl opt">,</span> DATA_NOT_CORRUPTED<span class="hl opt">,</span> <span class="hl opt">&</span>deprec_size<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_deprec() */</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_NO_DEPRECATED_SYMBOLS */</span><span class="hl ppc"></span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_huge_chunks</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests that datasets with chunks >4GB can't be created.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Quincey Koziol</span> <span class="hl com"> * Thursday, May 1, 2008</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_huge_chunks</span><span class="hl opt">(</span>hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> hid_t fid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* File ID */</span> hid_t dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset creation property list ID */</span> hid_t sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataspace ID */</span> hid_t dsid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset ID */</span> hsize_t dim<span class="hl opt">,</span> chunk_dim<span class="hl opt">;</span> <span class="hl com">/* Dataset and chunk dimensions */</span> hsize_t dim2<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">],</span> chunk_dim2<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">];</span> <span class="hl com">/* Dataset and chunk dimensions */</span> herr_t ret<span class="hl opt">;</span> <span class="hl com">/* Generic return value */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"creating dataset with >4GB chunks"</span><span class="hl opt">);</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">7</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> filename<span class="hl opt">);</span> <span class="hl com">/* Create file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Try to set too large of a chunk for 1-D dataset (# of elements) */</span> chunk_dim <span class="hl opt">=</span> TOO_HUGE_CHUNK_DIM<span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">, &</span>chunk_dim<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">" Set chunk size with too large of chunk dimensions."</span><span class="hl opt">);</span> <span class="hl com">/* Try to set too large of a chunk for n-D dataset (# of elements) */</span> chunk_dim2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> TOO_HUGE_CHUNK_DIM2_0<span class="hl opt">;</span> chunk_dim2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> TOO_HUGE_CHUNK_DIM2_1<span class="hl opt">;</span> chunk_dim2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> TOO_HUGE_CHUNK_DIM2_2<span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">3</span><span class="hl opt">,</span> chunk_dim2<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">" Set chunk size with too large of chunk dimensions."</span><span class="hl opt">);</span> <span class="hl com">/* Set 1-D chunk size */</span> chunk_dim <span class="hl opt">=</span> HUGE_CHUNK_DIM<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">, &</span>chunk_dim<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create 1-D dataspace */</span> dim <span class="hl opt">=</span> HUGE_DIM<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">, &</span>dim<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Try to create dataset */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> HUGE_DATASET<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dsid <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">" 1-D Dataset with too large of chunk dimensions created."</span><span class="hl opt">);</span> <span class="hl com">/* Close 1-D dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set n-D chunk size */</span> chunk_dim2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> HUGE_CHUNK_DIM2_0<span class="hl opt">;</span> chunk_dim2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> HUGE_CHUNK_DIM2_1<span class="hl opt">;</span> chunk_dim2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> HUGE_CHUNK_DIM2_2<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">3</span><span class="hl opt">,</span> chunk_dim2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create n-D dataspace */</span> dim2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> HUGE_DIM2_0<span class="hl opt">;</span> dim2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> HUGE_DIM2_1<span class="hl opt">;</span> dim2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> HUGE_DIM2_2<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">3</span><span class="hl opt">,</span> dim2<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Try to create dataset */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> HUGE_DATASET2<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dsid <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">" n-D Dataset with too large of chunk dimensions created."</span><span class="hl opt">);</span> <span class="hl com">/* Close n-D dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close everything else */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_huge_chunks() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_chunk_cache</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests API for setting rdcc info on a DAPL, and interaction</span> <span class="hl com"> * with the corresponding properties in the file structure.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Neil Fortner</span> <span class="hl com"> * Wednesday, October 29, 2008</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_chunk_cache</span><span class="hl opt">(</span>hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> hid_t fid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* File ID */</span> hid_t fapl_local <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Local fapl */</span> hid_t fapl_def <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Default fapl */</span> hid_t dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset creation property list ID */</span> hid_t dapl1 <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset access property list ID */</span> hid_t dapl2 <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset access property list ID */</span> hid_t sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataspace ID */</span> hid_t dsid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset ID */</span> hsize_t dim<span class="hl opt">,</span> chunk_dim<span class="hl opt">;</span> <span class="hl com">/* Dataset and chunk dimensions */</span> <span class="hl kwb">size_t</span> nslots_1<span class="hl opt">,</span> nslots_2<span class="hl opt">,</span> nslots_3<span class="hl opt">,</span> nslots_4<span class="hl opt">;</span> <span class="hl com">/* rdcc number of elements */</span> <span class="hl kwb">size_t</span> nbytes_1<span class="hl opt">,</span> nbytes_2<span class="hl opt">,</span> nbytes_3<span class="hl opt">,</span> nbytes_4<span class="hl opt">;</span> <span class="hl com">/* rdcc number of bytes */</span> <span class="hl kwb">size_t</span> nlinks<span class="hl opt">;</span> <span class="hl com">/* Number of link traversals */</span> <span class="hl kwb">double</span> w0_1<span class="hl opt">,</span> w0_2<span class="hl opt">,</span> w0_3<span class="hl opt">,</span> w0_4<span class="hl opt">;</span> <span class="hl com">/* rdcc preemption policy */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"dataset chunk cache configuration"</span><span class="hl opt">);</span> <span class="hl com">/* Create a default fapl and dapl */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fapl_def <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_FILE_ACCESS<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dapl1 <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_ACCESS<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify that H5Pget_chunk_cache(dapl) returns the same values as are in</span> <span class="hl com"> * the default fapl.</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_cache</span><span class="hl opt">(</span>fapl_def<span class="hl opt">,</span> NULL<span class="hl opt">, &</span>nslots_1<span class="hl opt">, &</span>nbytes_1<span class="hl opt">, &</span>w0_1<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_chunk_cache</span><span class="hl opt">(</span>dapl1<span class="hl opt">, &</span>nslots_4<span class="hl opt">, &</span>nbytes_4<span class="hl opt">, &</span>w0_4<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>nslots_1 <span class="hl opt">!=</span> nslots_4<span class="hl opt">) || (</span>nbytes_1 <span class="hl opt">!=</span> nbytes_4<span class="hl opt">) || !</span><span class="hl kwd">H5_DBL_ABS_EQUAL</span><span class="hl opt">(</span>w0_1<span class="hl opt">,</span> w0_4<span class="hl opt">))</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">" Cache values from default dapl do not match those from fapl."</span><span class="hl opt">);</span> <span class="hl com">/* Set a lapl property on dapl1 (to verify inheritance) */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_nlinks</span><span class="hl opt">(</span>dapl1<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">134</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_nlinks</span><span class="hl opt">(</span>dapl1<span class="hl opt">, &</span>nlinks<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>nlinks <span class="hl opt">!=</span> <span class="hl num">134</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">" nlinks parameter not set properly on dapl."</span><span class="hl opt">);</span> <span class="hl com">/* Copy fapl passed to this function (as we will be modifying it) */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fapl_local <span class="hl opt">=</span> <span class="hl kwd">H5Pcopy</span><span class="hl opt">(</span>fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set new rdcc settings on fapl */</span> nslots_2 <span class="hl opt">=</span> nslots_1 <span class="hl opt">*</span> <span class="hl num">2</span><span class="hl opt">;</span> nbytes_2 <span class="hl opt">=</span> nbytes_1 <span class="hl opt">*</span> <span class="hl num">2</span><span class="hl opt">;</span> w0_2 <span class="hl opt">=</span> w0_1 <span class="hl opt">/</span> <span class="hl num">2.0</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_cache</span><span class="hl opt">(</span>fapl_local<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> nslots_2<span class="hl opt">,</span> nbytes_2<span class="hl opt">,</span> w0_2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">8</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> filename<span class="hl opt">);</span> <span class="hl com">/* Create file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl_local<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set chunking */</span> chunk_dim <span class="hl opt">=</span> <span class="hl num">10</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">, &</span>chunk_dim<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create 1-D dataspace */</span> dim <span class="hl opt">=</span> <span class="hl num">100</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">, &</span>dim<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataset with default dapl */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset"</span><span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> dapl1<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Retrieve dapl from dataset, verify cache values are the same as on fapl_local */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dapl2 <span class="hl opt">=</span> <span class="hl kwd">H5Dget_access_plist</span><span class="hl opt">(</span>dsid<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_chunk_cache</span><span class="hl opt">(</span>dapl2<span class="hl opt">, &</span>nslots_4<span class="hl opt">, &</span>nbytes_4<span class="hl opt">, &</span>w0_4<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>nslots_2 <span class="hl opt">!=</span> nslots_4<span class="hl opt">) || (</span>nbytes_2 <span class="hl opt">!=</span> nbytes_4<span class="hl opt">) || !</span><span class="hl kwd">H5_DBL_ABS_EQUAL</span><span class="hl opt">(</span>w0_2<span class="hl opt">,</span> w0_4<span class="hl opt">))</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">" Cache values from retrieved dapl do not match those from fapl."</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dapl2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set new values on dapl1. nbytes will be set to default, so the file</span> <span class="hl com"> * property will override this setting */</span> nslots_3 <span class="hl opt">=</span> nslots_2 <span class="hl opt">*</span> <span class="hl num">2</span><span class="hl opt">;</span> nbytes_3 <span class="hl opt">=</span> H5D_CHUNK_CACHE_NBYTES_DEFAULT<span class="hl opt">;</span> w0_3 <span class="hl opt">=</span> w0_2 <span class="hl opt">/</span> <span class="hl num">2</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk_cache</span><span class="hl opt">(</span>dapl1<span class="hl opt">,</span> nslots_3<span class="hl opt">,</span> nbytes_3<span class="hl opt">,</span> w0_3<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dataset, reopen with dapl1. Note the use of a dapl with H5Oopen */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Oopen</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset"</span><span class="hl opt">,</span> dapl1<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Retrieve dapl from dataset, verify cache values are the same as on dapl1 */</span> <span class="hl com">/* Note we rely on the knowledge that H5Pget_chunk_cache retrieves these</span> <span class="hl com"> * values directly from the dataset structure, and not from a copy of the</span> <span class="hl com"> * dapl used to open the dataset (which is not preserved).</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dapl2 <span class="hl opt">=</span> <span class="hl kwd">H5Dget_access_plist</span><span class="hl opt">(</span>dsid<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_chunk_cache</span><span class="hl opt">(</span>dapl2<span class="hl opt">, &</span>nslots_4<span class="hl opt">, &</span>nbytes_4<span class="hl opt">, &</span>w0_4<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>nslots_3 <span class="hl opt">!=</span> nslots_4<span class="hl opt">) || (</span>nbytes_2 <span class="hl opt">!=</span> nbytes_4<span class="hl opt">) || !</span><span class="hl kwd">H5_DBL_ABS_EQUAL</span><span class="hl opt">(</span>w0_3<span class="hl opt">,</span> w0_4<span class="hl opt">))</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">" Cache values from retrieved dapl do not match those from dapl1."</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dapl2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dataset, reopen with H5P_DEFAULT as dapl */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Retrieve dapl from dataset, verify cache values are the same on fapl_local */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dapl2 <span class="hl opt">=</span> <span class="hl kwd">H5Dget_access_plist</span><span class="hl opt">(</span>dsid<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_chunk_cache</span><span class="hl opt">(</span>dapl2<span class="hl opt">, &</span>nslots_4<span class="hl opt">, &</span>nbytes_4<span class="hl opt">, &</span>w0_4<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>nslots_2 <span class="hl opt">!=</span> nslots_4<span class="hl opt">) || (</span>nbytes_2 <span class="hl opt">!=</span> nbytes_4<span class="hl opt">) || !</span><span class="hl kwd">H5_DBL_ABS_EQUAL</span><span class="hl opt">(</span>w0_2<span class="hl opt">,</span> w0_4<span class="hl opt">))</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">" Cache values from retrieved dapl do not match those from fapl."</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dapl2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Similarly, test use of H5Dcreate2 with H5P_DEFAULT */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset2"</span><span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dapl2 <span class="hl opt">=</span> <span class="hl kwd">H5Dget_access_plist</span><span class="hl opt">(</span>dsid<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_chunk_cache</span><span class="hl opt">(</span>dapl2<span class="hl opt">, &</span>nslots_4<span class="hl opt">, &</span>nbytes_4<span class="hl opt">, &</span>w0_4<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>nslots_2 <span class="hl opt">!=</span> nslots_4<span class="hl opt">) || (</span>nbytes_2 <span class="hl opt">!=</span> nbytes_4<span class="hl opt">) || !</span><span class="hl kwd">H5_DBL_ABS_EQUAL</span><span class="hl opt">(</span>w0_2<span class="hl opt">,</span> w0_4<span class="hl opt">))</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">" Cache values from retrieved dapl do not match those from fapl."</span><span class="hl opt">);</span> <span class="hl com">/* Don't close dapl2, we will use it in the next section */</span> <span class="hl com">/* Modify cache values on fapl_local */</span> nbytes_3 <span class="hl opt">=</span> nbytes_2 <span class="hl opt">*</span> <span class="hl num">2</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_cache</span><span class="hl opt">(</span>fapl_local<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> nslots_3<span class="hl opt">,</span> nbytes_3<span class="hl opt">,</span> w0_3<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close and reopen file with new fapl_local */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fopen</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_RDWR<span class="hl opt">,</span> fapl_local<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify that dapl2 retrieved earlier (using values from the old fapl)</span> <span class="hl com"> * sets its values in the new file (test use of H5Dopen2 with a dapl)</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset"</span><span class="hl opt">,</span> dapl2<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dapl2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dapl2, to avoid id leak */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dapl2 <span class="hl opt">=</span> <span class="hl kwd">H5Dget_access_plist</span><span class="hl opt">(</span>dsid<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_chunk_cache</span><span class="hl opt">(</span>dapl2<span class="hl opt">, &</span>nslots_4<span class="hl opt">, &</span>nbytes_4<span class="hl opt">, &</span>w0_4<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>nslots_2 <span class="hl opt">!=</span> nslots_4<span class="hl opt">) || (</span>nbytes_2 <span class="hl opt">!=</span> nbytes_4<span class="hl opt">) || !</span><span class="hl kwd">H5_DBL_ABS_EQUAL</span><span class="hl opt">(</span>w0_2<span class="hl opt">,</span> w0_4<span class="hl opt">))</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">" Cache values from retrieved dapl do not match those from dapl2."</span><span class="hl opt">);</span> <span class="hl com">/* Test H5D_CHUNK_CACHE_NSLOTS_DEFAULT and H5D_CHUNK_CACHE_W0_DEFAULT */</span> nslots_2 <span class="hl opt">=</span> H5D_CHUNK_CACHE_NSLOTS_DEFAULT<span class="hl opt">;</span> w0_2 <span class="hl opt">=</span> H5D_CHUNK_CACHE_W0_DEFAULT<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk_cache</span><span class="hl opt">(</span>dapl2<span class="hl opt">,</span> nslots_2<span class="hl opt">,</span> nbytes_2<span class="hl opt">,</span> w0_2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset"</span><span class="hl opt">,</span> dapl2<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dapl2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dapl2, to avoid id leak */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dapl2 <span class="hl opt">=</span> <span class="hl kwd">H5Dget_access_plist</span><span class="hl opt">(</span>dsid<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_chunk_cache</span><span class="hl opt">(</span>dapl2<span class="hl opt">, &</span>nslots_4<span class="hl opt">, &</span>nbytes_4<span class="hl opt">, &</span>w0_4<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>nslots_3 <span class="hl opt">!=</span> nslots_4<span class="hl opt">) || (</span>nbytes_2 <span class="hl opt">!=</span> nbytes_4<span class="hl opt">) || !</span><span class="hl kwd">H5_DBL_ABS_EQUAL</span><span class="hl opt">(</span>w0_3<span class="hl opt">,</span> w0_4<span class="hl opt">))</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">" Cache values from retrieved dapl do not match those expected."</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dapl2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify that the file has indeed started using the new cache values (test</span> <span class="hl com"> * use of H5Oopen with H5P_DEFAULT) */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Oopen</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dapl2 <span class="hl opt">=</span> <span class="hl kwd">H5Dget_access_plist</span><span class="hl opt">(</span>dsid<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_chunk_cache</span><span class="hl opt">(</span>dapl2<span class="hl opt">, &</span>nslots_4<span class="hl opt">, &</span>nbytes_4<span class="hl opt">, &</span>w0_4<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>nslots_3 <span class="hl opt">!=</span> nslots_4<span class="hl opt">) || (</span>nbytes_3 <span class="hl opt">!=</span> nbytes_4<span class="hl opt">) || !</span><span class="hl kwd">H5_DBL_ABS_EQUAL</span><span class="hl opt">(</span>w0_3<span class="hl opt">,</span> w0_4<span class="hl opt">))</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">" Cache values from retrieved dapl do not match those from fapl."</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dapl2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify functionality of H5Pcopy with a dapl */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dapl2 <span class="hl opt">=</span> <span class="hl kwd">H5Pcopy</span><span class="hl opt">(</span>dapl1<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_chunk_cache</span><span class="hl opt">(</span>dapl2<span class="hl opt">, &</span>nslots_4<span class="hl opt">, &</span>nbytes_4<span class="hl opt">, &</span>w0_4<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>nslots_3 <span class="hl opt">!=</span> nslots_4<span class="hl opt">) || (</span>nbytes_1 <span class="hl opt">!=</span> nbytes_4<span class="hl opt">) || !</span><span class="hl kwd">H5_DBL_ABS_EQUAL</span><span class="hl opt">(</span>w0_3<span class="hl opt">,</span> w0_4<span class="hl opt">))</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">" Cache values from dapl2 do not match those from dapl1."</span><span class="hl opt">);</span> <span class="hl com">/* Close */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>fapl_local<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>fapl_def<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dapl1<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dapl2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>fapl_local<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>fapl_def<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dapl1<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dapl2<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_chunk_cache() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_big_chunks_bypass_cache</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: When the chunk size is bigger than the cache size and the</span> <span class="hl com"> * chunk isn't on disk, this test verifies that the library</span> <span class="hl com"> * bypasses the cache.</span> <span class="hl com"> *</span> <span class="hl com"> * Note: This test is not very conclusive - it doesn't actually check</span> <span class="hl com"> * if the chunks bypass the cache... :-( -QAK</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Raymond Lu</span> <span class="hl com"> * 11 Feb 2009</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_big_chunks_bypass_cache</span><span class="hl opt">(</span>hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> hid_t fid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* File ID */</span> hid_t fapl_local <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* File access property list ID */</span> hid_t dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> t_dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset creation property list ID */</span> hid_t sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> t_sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataspace ID */</span> hid_t mid<span class="hl opt">;</span> <span class="hl com">/* Memory space ID */</span> hid_t dsid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> t_dsid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset ID */</span> hsize_t dim<span class="hl opt">,</span> chunk_dim<span class="hl opt">;</span> <span class="hl com">/* Dataset and chunk dimensions */</span> hsize_t t_dim<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">],</span> t_max<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">],</span> t_chunk_dim<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Dataset and chunk dimensions */</span> <span class="hl kwb">size_t</span> rdcc_nelmts<span class="hl opt">,</span> rdcc_nbytes<span class="hl opt">;</span> <span class="hl com">/* Chunk cache parameters */</span> <span class="hl kwb">int</span> fvalue <span class="hl opt">=</span> BYPASS_FILL_VALUE<span class="hl opt">;</span> <span class="hl com">/* Fill value */</span> hsize_t count<span class="hl opt">,</span> stride<span class="hl opt">,</span> offset<span class="hl opt">,</span> block<span class="hl opt">;</span> <span class="hl com">/* Setting for hyperslab (1-D) */</span> hsize_t t_count<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">],</span> t_stride<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">],</span> t_offset<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">],</span> t_block<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Setting for hyperslab (2-D) */</span> <span class="hl com">/* Buffers for reading and writing data (1-D) */</span> <span class="hl kwb">int</span> <span class="hl opt">*</span>wdata <span class="hl opt">=</span> NULL<span class="hl opt">, *</span>rdata1 <span class="hl opt">=</span> NULL<span class="hl opt">, *</span>rdata2 <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl com">/* Buffers for reading and writing data (2-D) */</span> <span class="hl kwb">int</span> <span class="hl opt">**</span> t_wdata <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">int</span> <span class="hl opt">**</span> t_rdata1 <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">int</span> <span class="hl opt">**</span> t_rdata2 <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">int</span> <span class="hl opt">*</span> t_wdata_bytes <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">int</span> <span class="hl opt">*</span> t_rdata1_bytes <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">int</span> <span class="hl opt">*</span> t_rdata2_bytes <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">int</span> i<span class="hl opt">,</span> j<span class="hl opt">;</span> <span class="hl com">/* Local index variables */</span> H5F_libver_t low<span class="hl opt">;</span> <span class="hl com">/* File format low bound */</span> H5D_chunk_index_t idx_type<span class="hl opt">,</span> t_idx_type<span class="hl opt">;</span> <span class="hl com">/* Dataset chunk index types */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"big chunks bypassing the cache"</span><span class="hl opt">);</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">9</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> filename<span class="hl opt">);</span> <span class="hl com">/* Set up data arrays */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">==</span> <span class="hl opt">(</span>t_wdata_bytes <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">*)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">((</span>BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">2</span><span class="hl opt">) * (</span>BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">2</span><span class="hl opt">),</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>t_wdata <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">**)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">((</span>BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">2</span><span class="hl opt">),</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>t_wdata_bytes<span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span>BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">2</span><span class="hl opt">);</span> i<span class="hl opt">++)</span> t_wdata<span class="hl opt">[</span>i<span class="hl opt">] =</span> t_wdata_bytes <span class="hl opt">+ (</span>i <span class="hl opt">* (</span>BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">2</span><span class="hl opt">));</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>t_rdata1_bytes <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">*)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>BYPASS_DIM <span class="hl opt">*</span> BYPASS_DIM<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>t_rdata1 <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">**)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>BYPASS_DIM<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>t_rdata1_bytes<span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> BYPASS_DIM<span class="hl opt">;</span> i<span class="hl opt">++)</span> t_rdata1<span class="hl opt">[</span>i<span class="hl opt">] =</span> t_rdata1_bytes <span class="hl opt">+ (</span>i <span class="hl opt">*</span> BYPASS_DIM<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">==</span> <span class="hl opt">(</span>t_rdata2_bytes <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">*)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">((</span>BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">2</span><span class="hl opt">) * (</span>BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">2</span><span class="hl opt">),</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>t_rdata2 <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">**)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">((</span>BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">2</span><span class="hl opt">),</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>t_rdata2_bytes<span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span>BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">2</span><span class="hl opt">);</span> i<span class="hl opt">++)</span> t_rdata2<span class="hl opt">[</span>i<span class="hl opt">] =</span> t_rdata2_bytes <span class="hl opt">+ (</span>i <span class="hl opt">* (</span>BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">2</span><span class="hl opt">));</span> <span class="hl com">/* Check if we are using the latest version of the format */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_libver_bounds</span><span class="hl opt">(</span>fapl<span class="hl opt">, &</span>low<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Copy fapl passed to this function (as we will be modifying it) */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fapl_local <span class="hl opt">=</span> <span class="hl kwd">H5Pcopy</span><span class="hl opt">(</span>fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Define cache size to be smaller than chunk size */</span> rdcc_nelmts <span class="hl opt">=</span> BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">5</span><span class="hl opt">;</span> rdcc_nbytes <span class="hl opt">=</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">5</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_cache</span><span class="hl opt">(</span>fapl_local<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> rdcc_nelmts<span class="hl opt">,</span> rdcc_nbytes<span class="hl opt">,</span> <span class="hl num">0.0</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl_local<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create 1-D & 2-D dataspace */</span> dim <span class="hl opt">=</span> t_dim<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> t_dim<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> BYPASS_DIM<span class="hl opt">;</span> t_max<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> t_max<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> H5S_UNLIMITED<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">, &</span>dim<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>t_sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> t_dim<span class="hl opt">,</span> t_max<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create 1-D & 2-D dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>t_dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Define chunk size. */</span> <span class="hl com">/* There will be 2 chunks in 1-D dataset & 4 chunks in the 2-D dataset */</span> chunk_dim <span class="hl opt">=</span> t_chunk_dim<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> t_chunk_dim<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> BYPASS_CHUNK_DIM<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">, &</span>chunk_dim<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>t_dcpl<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> t_chunk_dim<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Define fill value, fill time, and chunk allocation time */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fill_value</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">, &</span>fvalue<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fill_value</span><span class="hl opt">(</span>t_dcpl<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">, &</span>fvalue<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fill_time</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> H5D_FILL_TIME_IFSET<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fill_time</span><span class="hl opt">(</span>t_dcpl<span class="hl opt">,</span> H5D_FILL_TIME_IFSET<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_alloc_time</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> H5D_ALLOC_TIME_INCR<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_alloc_time</span><span class="hl opt">(</span>t_dcpl<span class="hl opt">,</span> H5D_ALLOC_TIME_INCR<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create the first 1-D dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> BYPASS_DATASET1<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create the first 2-D dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>t_dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> T_BYPASS_DATASET1<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> t_sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> t_dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the chunk index types for 1-D and 2-d datasets */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>dsid<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>t_dsid<span class="hl opt">, &</span>t_idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Chunk index type expected depends on whether we are using the latest version of the format */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>low <span class="hl opt">==</span> H5F_LIBVER_LATEST<span class="hl opt">) {</span> <span class="hl com">/* Verify index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_FARRAY<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using Fixed Array as index"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>t_idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_BT2<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v2 B-tree as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl com">/* Verify index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_BTREE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v1 B-tree as index"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>t_idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_BTREE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v1 B-tree as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> <span class="hl com">/* Select first chunk to write the data */</span> offset <span class="hl opt">=</span> t_offset<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> t_offset<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">0</span><span class="hl opt">;</span> count <span class="hl opt">=</span> t_count<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> t_count<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> stride <span class="hl opt">=</span> t_stride<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> t_stride<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> block <span class="hl opt">=</span> t_block<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> t_block<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">2</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">, &</span>offset<span class="hl opt">, &</span>stride<span class="hl opt">, &</span>count<span class="hl opt">, &</span>block<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>t_sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> t_offset<span class="hl opt">,</span> t_stride<span class="hl opt">,</span> t_count<span class="hl opt">,</span> t_block<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Allocate buffers */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>wdata <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">*)</span><span class="hl kwd">HDmalloc</span><span class="hl opt">(</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) * (</span>BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">2</span><span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>rdata1 <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">*)</span><span class="hl kwd">HDmalloc</span><span class="hl opt">(</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> BYPASS_DIM<span class="hl opt">)))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>rdata2 <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">*)</span><span class="hl kwd">HDmalloc</span><span class="hl opt">(</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) * (</span>BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">2</span><span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize data to write for 1-D dataset */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">2</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> wdata<span class="hl opt">[</span>i<span class="hl opt">] =</span> i<span class="hl opt">;</span> <span class="hl com">/* Initialize data to write for 2-D dataset */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">2</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">2</span><span class="hl opt">;</span> j<span class="hl opt">++)</span> t_wdata<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] =</span> j<span class="hl opt">;</span> <span class="hl com">/* Set up memory space for the 2-D dataset */</span> mid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> t_block<span class="hl opt">,</span> NULL<span class="hl opt">);</span> <span class="hl com">/* Write to the first 1-D & 2-D datasets */</span> <span class="hl com">/* This write should go through the cache because fill value is used. */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> wdata<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>t_dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> mid<span class="hl opt">,</span> t_sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> t_wdata_bytes<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close the first 1-D & 2-D datasets */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>t_dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Reopen the first 1-D & 2-D datasets */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> BYPASS_DATASET1<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>t_dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> T_BYPASS_DATASET1<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Reads both 2 chunks. Reading the second chunk should bypass the cache because the</span> <span class="hl com"> * chunk is bigger than the cache size and it isn't allocated on disk. */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> rdata1<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>t_dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> t_rdata1_bytes<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify data for the first 1-D dataset */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">2</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>rdata1<span class="hl opt">[</span>i<span class="hl opt">] !=</span> i<span class="hl opt">) {</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written in the 1st chunk.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At line %d and index %d, rdata1 = %d. It should be %d.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">,</span> i<span class="hl opt">,</span> rdata1<span class="hl opt">[</span>i<span class="hl opt">],</span> i<span class="hl opt">);</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">2</span><span class="hl opt">;</span> j <span class="hl opt"><</span> BYPASS_DIM<span class="hl opt">;</span> j<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>rdata1<span class="hl opt">[</span>j<span class="hl opt">] !=</span> fvalue<span class="hl opt">) {</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written in the 2nd chunk.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At line %d and index %d, rdata1 = %d. It should be %d.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">,</span> i<span class="hl opt">,</span> rdata1<span class="hl opt">[</span>i<span class="hl opt">],</span> fvalue<span class="hl opt">);</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Verify data for the first 2-D dataset */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">2</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">2</span><span class="hl opt">;</span> j<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>t_rdata1<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] !=</span> j<span class="hl opt">) {</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written in the 1st chunk.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At line %d and index (%d, %d), t_rdata1 = %d. It should be %d.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">,</span> i<span class="hl opt">,</span> j<span class="hl opt">,</span> t_rdata1<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">],</span> j<span class="hl opt">);</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">2</span><span class="hl opt">;</span> i <span class="hl opt"><</span> BYPASS_DIM<span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">2</span><span class="hl opt">;</span> j <span class="hl opt"><</span> BYPASS_DIM<span class="hl opt">;</span> j<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>t_rdata1<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] !=</span> fvalue<span class="hl opt">) {</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written in the 2nd chunk.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At line %d and index (%d, %d), t_rdata1 = %d. It should be %d.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">,</span> i<span class="hl opt">,</span> j<span class="hl opt">,</span> t_rdata1<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">],</span> fvalue<span class="hl opt">);</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Close the first 1-D & 2-D datasets */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>t_dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create a second dataset without fill value. This time, both write</span> <span class="hl com"> * and read should bypass the cache because the chunk is bigger than the</span> <span class="hl com"> * cache size and it's not allocated on disk. */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fill_time</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> H5D_FILL_TIME_NEVER<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fill_time</span><span class="hl opt">(</span>t_dcpl<span class="hl opt">,</span> H5D_FILL_TIME_NEVER<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create a second 1-D & 2-D dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> BYPASS_DATASET2<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>t_dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> T_BYPASS_DATASET2<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> t_sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> t_dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Write to the second 1-D & 2-D dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> wdata<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>t_dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> mid<span class="hl opt">,</span> t_sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> t_wdata_bytes<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close the second 1-D & 2-D dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>t_dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Reopen the second 1-d dataset and 2-d dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> BYPASS_DATASET2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>t_dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> T_BYPASS_DATASET2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read back only the part that was written to the file. Reading the</span> <span class="hl com"> * half chunk should bypass the cache because the chunk is bigger than</span> <span class="hl com"> * the cache size. */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> rdata2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>t_dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> mid<span class="hl opt">,</span> t_sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> t_rdata2_bytes<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify data for the second 1-D dataset */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">2</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>rdata2<span class="hl opt">[</span>i<span class="hl opt">] !=</span> i<span class="hl opt">) {</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written in the chunk.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At line %d and index %d, rdata2 = %d. It should be %d.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">,</span> i<span class="hl opt">,</span> rdata2<span class="hl opt">[</span>i<span class="hl opt">],</span> i<span class="hl opt">);</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Verify data for the second 2-D dataset */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">2</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> BYPASS_CHUNK_DIM <span class="hl opt">/</span> <span class="hl num">2</span><span class="hl opt">;</span> j<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>t_rdata2<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] !=</span> j<span class="hl opt">) {</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Read different values than written in the chunk.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" At line %d and index (%d, %d), t_rdata2 = %d. It should be %d.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">,</span> i<span class="hl opt">,</span> j<span class="hl opt">,</span> t_rdata2<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">],</span> j<span class="hl opt">);</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Close IDs */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>t_sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>t_dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>t_dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>fapl_local<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Release buffers */</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>wdata<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rdata1<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rdata2<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>t_wdata<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>t_rdata1<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>t_rdata2<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>t_wdata_bytes<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>t_rdata1_bytes<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>t_rdata2_bytes<span class="hl opt">);</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>t_dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>fapl_local<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>t_dsid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>t_sid<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>wdata<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rdata1<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rdata2<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>t_wdata<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>t_rdata1<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>t_rdata2<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>t_wdata_bytes<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>t_rdata1_bytes<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>t_rdata2_bytes<span class="hl opt">);</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_big_chunks_bypass_cache() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_chunk_fast</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests support for extensible arrays as chunk index.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Quincey Koziol</span> <span class="hl com"> * Tuesday, February 3, 2009</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_chunk_fast</span><span class="hl opt">(</span><span class="hl kwb">const char</span> <span class="hl opt">*</span>env_h5_driver<span class="hl opt">,</span> hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> hid_t fid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* File ID */</span> hid_t my_fapl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* File access property list ID */</span> hid_t dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset creation property list ID */</span> hid_t sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataspace ID */</span> hid_t scalar_sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Scalar dataspace ID */</span> hid_t dsid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset ID */</span> hsize_t fill<span class="hl opt">;</span> <span class="hl com">/* Temporary value, for filling arrays */</span> hsize_t hs_size<span class="hl opt">[</span>EARRAY_MAX_RANK<span class="hl opt">];</span> <span class="hl com">/* Hyperslab size */</span> hsize_t chunk_dim<span class="hl opt">[</span>EARRAY_MAX_RANK<span class="hl opt">];</span> <span class="hl com">/* Chunk dimensions */</span> H5F_libver_t low<span class="hl opt">;</span> <span class="hl com">/* File format low bound */</span> <span class="hl kwb">unsigned</span> swmr<span class="hl opt">;</span> <span class="hl com">/* Whether file should be written with SWMR access enabled */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"datasets w/extensible array as chunk index"</span><span class="hl opt">);</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">10</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> filename<span class="hl opt">);</span> <span class="hl com">/* Copy the file access property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>my_fapl <span class="hl opt">=</span> <span class="hl kwd">H5Pcopy</span><span class="hl opt">(</span>fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Turn on the chunk cache again */</span> <span class="hl opt">{</span> <span class="hl kwb">int</span> mdc_nelmts<span class="hl opt">;</span> <span class="hl com">/* # of elements in metadata cache */</span> <span class="hl kwb">size_t</span> rdcc_nelmts<span class="hl opt">;</span> <span class="hl com">/* # of chunks in chunk cache */</span> <span class="hl kwb">size_t</span> rdcc_nbytes<span class="hl opt">;</span> <span class="hl com">/* # of bytes in chunk cache */</span> <span class="hl kwb">double</span> rdcc_w0<span class="hl opt">;</span> <span class="hl com">/* write-ratio for chunk cache */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_cache</span><span class="hl opt">(</span>my_fapl<span class="hl opt">, &</span>mdc_nelmts<span class="hl opt">, &</span>rdcc_nelmts<span class="hl opt">, &</span>rdcc_nbytes<span class="hl opt">, &</span>rdcc_w0<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> rdcc_nbytes <span class="hl opt">=</span> <span class="hl num">1048576</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_cache</span><span class="hl opt">(</span>my_fapl<span class="hl opt">,</span> mdc_nelmts<span class="hl opt">,</span> rdcc_nelmts<span class="hl opt">,</span> rdcc_nbytes<span class="hl opt">,</span> rdcc_w0<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end block */</span> <span class="hl com">/* Check if we are using the latest version of the format */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_libver_bounds</span><span class="hl opt">(</span>my_fapl<span class="hl opt">, &</span>low<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create scalar dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>scalar_sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate</span><span class="hl opt">(</span>H5S_SCALAR<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize chunk dimensions */</span> fill <span class="hl opt">=</span> EARRAY_CHUNK_DIM<span class="hl opt">;</span> <span class="hl kwd">H5VM_array_fill</span><span class="hl opt">(</span>chunk_dim<span class="hl opt">, &</span>fill<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>fill<span class="hl opt">),</span> EARRAY_MAX_RANK<span class="hl opt">);</span> <span class="hl com">/* Initialize hyperslab size */</span> fill <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwd">H5VM_array_fill</span><span class="hl opt">(</span>hs_size<span class="hl opt">, &</span>fill<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>fill<span class="hl opt">),</span> EARRAY_MAX_RANK<span class="hl opt">);</span> <span class="hl com">/* Loop over using SWMR access to write */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>swmr <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> swmr <span class="hl opt"><=</span> <span class="hl num">1</span><span class="hl opt">;</span> swmr<span class="hl opt">++) {</span> <span class="hl kwb">int</span> compress<span class="hl opt">;</span> <span class="hl com">/* Whether chunks should be compressed */</span> <span class="hl com">/* SWMR is now supported with/without latest format: */</span> <span class="hl com">/* (1) write+latest-format (2) SWMR-write+non-latest-format */</span> <span class="hl com">/* Skip this iteration if SWMR I/O is not supported for the VFD specified</span> <span class="hl com"> * by the environment variable.</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>swmr <span class="hl opt">&& !</span><span class="hl kwd">H5FD__supports_swmr_test</span><span class="hl opt">(</span>env_h5_driver<span class="hl opt">))</span> <span class="hl kwa">continue</span><span class="hl opt">;</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_DEFLATE</span> <span class="hl com">/* Loop over compressing chunks */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>compress <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> compress <span class="hl opt"><=</span> <span class="hl num">1</span><span class="hl opt">;</span> compress<span class="hl opt">++)</span> <span class="hl ppc">#else</span> <span class="hl com">/* Loop over without compression */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>compress <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> compress <span class="hl opt"><=</span> <span class="hl num">0</span><span class="hl opt">;</span> compress<span class="hl opt">++)</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_DEFLATE */</span><span class="hl ppc"></span> <span class="hl opt">{</span> H5D_alloc_time_t alloc_time<span class="hl opt">;</span> <span class="hl com">/* Storage allocation time */</span> <span class="hl com">/* Loop over storage allocation time */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>alloc_time <span class="hl opt">=</span> H5D_ALLOC_TIME_EARLY<span class="hl opt">;</span> alloc_time <span class="hl opt"><=</span> H5D_ALLOC_TIME_INCR<span class="hl opt">;</span> alloc_time<span class="hl opt">++) {</span> <span class="hl kwb">unsigned</span> ndims<span class="hl opt">;</span> <span class="hl com">/* Current # of dims to test */</span> <span class="hl com">/* Loop over dataspace ranks to test */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>ndims <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> ndims <span class="hl opt">< (</span>EARRAY_MAX_RANK <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">);</span> ndims<span class="hl opt">++) {</span> <span class="hl kwb">unsigned</span> unlim_dim<span class="hl opt">;</span> <span class="hl com">/* Create dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set chunking & chunk dims */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">, (</span><span class="hl kwb">int</span><span class="hl opt">)</span>ndims<span class="hl opt">,</span> chunk_dim<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_DEFLATE</span> <span class="hl com">/* Check if we should compress the chunks */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>compress<span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_deflate</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">9</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_DEFLATE */</span><span class="hl ppc"></span> <span class="hl com">/* Set fill time */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fill_time</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> H5D_FILL_TIME_ALLOC<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set allocation time */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_alloc_time</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> alloc_time<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Loop over which dimension is unlimited */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>unlim_dim <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> unlim_dim <span class="hl opt"><</span> ndims<span class="hl opt">;</span> unlim_dim<span class="hl opt">++) {</span> H5D_chunk_index_t idx_type<span class="hl opt">;</span> <span class="hl com">/* Dataset chunk index type */</span> hsize_t dim<span class="hl opt">[</span>EARRAY_MAX_RANK<span class="hl opt">],</span> max_dim<span class="hl opt">[</span>EARRAY_MAX_RANK<span class="hl opt">];</span> <span class="hl com">/* Dataset dimensions */</span> hsize_t swizzled_dim<span class="hl opt">[</span>EARRAY_MAX_RANK<span class="hl opt">];</span> <span class="hl com">/* Dimensions, with unlimited dimension moved</span> <span class="hl com"> to rank 0 */</span> hsize_t down<span class="hl opt">[</span>EARRAY_MAX_RANK<span class="hl opt">];</span> <span class="hl com">/* 'down' sizes, for computing array index */</span> hsize_t hs_offset<span class="hl opt">[</span>EARRAY_MAX_RANK<span class="hl opt">];</span> <span class="hl com">/* Hyperslab offset */</span> hssize_t snpoints<span class="hl opt">;</span> <span class="hl com">/* # of points in dataspace extent (signed) */</span> hsize_t npoints<span class="hl opt">;</span> <span class="hl com">/* # of points in dataspace extent */</span> <span class="hl kwb">unsigned</span> write_elem<span class="hl opt">,</span> read_elem<span class="hl opt">;</span> <span class="hl com">/* Element written/read */</span> hsize_t u<span class="hl opt">;</span> <span class="hl com">/* Local index variable */</span> <span class="hl com">/* Create file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC <span class="hl opt">| (</span>swmr ? H5F_ACC_SWMR_WRITE <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">),</span> H5P_DEFAULT<span class="hl opt">,</span> my_fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create n-D dataspace */</span> fill <span class="hl opt">=</span> EARRAY_DSET_DIM<span class="hl opt">;</span> <span class="hl kwd">H5VM_array_fill</span><span class="hl opt">(</span>dim<span class="hl opt">, &</span>fill<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>fill<span class="hl opt">),</span> EARRAY_MAX_RANK<span class="hl opt">);</span> fill <span class="hl opt">=</span> EARRAY_DSET_DIM<span class="hl opt">;</span> <span class="hl kwd">H5VM_array_fill</span><span class="hl opt">(</span>max_dim<span class="hl opt">, &</span>fill<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>fill<span class="hl opt">),</span> EARRAY_MAX_RANK<span class="hl opt">);</span> max_dim<span class="hl opt">[</span>unlim_dim<span class="hl opt">] =</span> H5S_UNLIMITED<span class="hl opt">;</span> fill <span class="hl opt">=</span> EARRAY_DSET_DIM<span class="hl opt">;</span> <span class="hl kwd">H5VM_array_fill</span><span class="hl opt">(</span>swizzled_dim<span class="hl opt">, &</span>fill<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>fill<span class="hl opt">),</span> EARRAY_MAX_RANK<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">((</span><span class="hl kwb">int</span><span class="hl opt">)</span>ndims<span class="hl opt">,</span> dim<span class="hl opt">,</span> max_dim<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the number of points in the dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>snpoints <span class="hl opt">=</span> <span class="hl kwd">H5Sget_simple_extent_npoints</span><span class="hl opt">(</span>sid<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> npoints <span class="hl opt">= (</span>hsize_t<span class="hl opt">)</span>snpoints<span class="hl opt">;</span> <span class="hl com">/* Compute the "down" dimension values */</span> <span class="hl kwd">H5VM_array_down</span><span class="hl opt">(</span>ndims<span class="hl opt">,</span> dim<span class="hl opt">,</span> down<span class="hl opt">);</span> <span class="hl com">/* Create chunked dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset"</span><span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the chunk index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>dsid<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Chunk index type expected depends on whether we are using the latest version of the</span> <span class="hl com"> * format */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>low <span class="hl opt">==</span> H5F_LIBVER_LATEST <span class="hl opt">||</span> swmr<span class="hl opt">) {</span> <span class="hl com">/* Verify index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_EARRAY<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using extensible array as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl com">/* Verify index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_BTREE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v1 B-tree as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> <span class="hl com">/* Fill existing elements */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>u <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> u <span class="hl opt"><</span> npoints<span class="hl opt">;</span> u<span class="hl opt">++) {</span> <span class="hl com">/* Compute the coordinate from the linear offset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5VM_array_calc_pre</span><span class="hl opt">(</span>u<span class="hl opt">,</span> ndims<span class="hl opt">,</span> down<span class="hl opt">,</span> hs_offset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Un-swizzle hyperslab offset in same way as swizzled dimensions */</span> <span class="hl kwd">H5VM_unswizzle_coords</span><span class="hl opt">(</span>hsize_t<span class="hl opt">,</span> hs_offset<span class="hl opt">,</span> unlim_dim<span class="hl opt">);</span> <span class="hl com">/* Select a single element in the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> hs_offset<span class="hl opt">,</span> NULL<span class="hl opt">,</span> hs_size<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read (unwritten) element from dataset */</span> read_elem <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>read_elem<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify unwritten element is fill value (0) */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>read_elem <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"invalid unwritten element read"</span><span class="hl opt">);</span> <span class="hl com">/* Write element to dataset */</span> write_elem <span class="hl opt">= (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>u<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>write_elem<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read element from dataset */</span> read_elem <span class="hl opt">=</span> write_elem <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>read_elem<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify written element is read in */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>read_elem <span class="hl opt">!=</span> write_elem<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"invalid written element read"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/* Incrementally extend dataset and verify write/reads */</span> <span class="hl kwa">while</span> <span class="hl opt">(</span>dim<span class="hl opt">[</span>unlim_dim<span class="hl opt">] <</span> EARRAY_MAX_EXTEND<span class="hl opt">) {</span> hssize_t snew_npoints<span class="hl opt">;</span> <span class="hl com">/* # of points in dataspace extent (signed) */</span> hsize_t new_npoints<span class="hl opt">;</span> <span class="hl com">/* # of points in dataspace extent */</span> <span class="hl com">/* Extend dataset */</span> dim<span class="hl opt">[</span>unlim_dim<span class="hl opt">] +=</span> EARRAY_EXTEND_INCR<span class="hl opt">;</span> swizzled_dim<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] +=</span> EARRAY_EXTEND_INCR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dset_extent</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> dim<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close old dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get dataspace for dataset now */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Dget_space</span><span class="hl opt">(</span>dsid<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the new number of points in the dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>snew_npoints <span class="hl opt">=</span> <span class="hl kwd">H5Sget_simple_extent_npoints</span><span class="hl opt">(</span>sid<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> new_npoints <span class="hl opt">= (</span>hsize_t<span class="hl opt">)</span>snew_npoints<span class="hl opt">;</span> <span class="hl com">/* Fill new elements */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>u <span class="hl opt">=</span> npoints<span class="hl opt">;</span> u <span class="hl opt"><</span> new_npoints<span class="hl opt">;</span> u<span class="hl opt">++) {</span> <span class="hl com">/* Compute the coordinate from the linear offset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5VM_array_calc</span><span class="hl opt">(</span>u<span class="hl opt">,</span> ndims<span class="hl opt">,</span> swizzled_dim<span class="hl opt">,</span> hs_offset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Un-swizzle hyperslab offset in same way as swizzled dimensions */</span> <span class="hl kwd">H5VM_unswizzle_coords</span><span class="hl opt">(</span>hsize_t<span class="hl opt">,</span> hs_offset<span class="hl opt">,</span> unlim_dim<span class="hl opt">);</span> <span class="hl com">/* Select a single element in the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> hs_offset<span class="hl opt">,</span> NULL<span class="hl opt">,</span> hs_size<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read (unwritten) element from dataset */</span> read_elem <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>read_elem<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify unwritten element is fill value (0) */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>read_elem <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"invalid unwritten element read"</span><span class="hl opt">);</span> <span class="hl com">/* Write element to dataset */</span> write_elem <span class="hl opt">= (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>u<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> <span class="hl opt">&</span>write_elem<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read element from dataset */</span> read_elem <span class="hl opt">=</span> write_elem <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>read_elem<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify written element is read in */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>read_elem <span class="hl opt">!=</span> write_elem<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"invalid written element read"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/* Update the number of points in the dataspace */</span> npoints <span class="hl opt">=</span> new_npoints<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end while */</span> <span class="hl com">/* Close everything */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Re-open file & dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fopen</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_RDONLY <span class="hl opt">| (</span>swmr ? H5F_ACC_SWMR_READ <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">),</span> my_fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the chunk index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>dsid<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Chunk index tyepe expected depends on whether we are using the latest version of</span> <span class="hl com"> * the format */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>low <span class="hl opt">==</span> H5F_LIBVER_LATEST <span class="hl opt">||</span> swmr<span class="hl opt">) {</span> <span class="hl com">/* Verify index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_EARRAY<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using extensible array as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl com">/* Verify index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_BTREE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v1 B-tree as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> <span class="hl com">/* Get dataspace for dataset now */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Dget_space</span><span class="hl opt">(</span>dsid<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the number of points in the dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>snpoints <span class="hl opt">=</span> <span class="hl kwd">H5Sget_simple_extent_npoints</span><span class="hl opt">(</span>sid<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> npoints <span class="hl opt">= (</span>hsize_t<span class="hl opt">)</span>snpoints<span class="hl opt">;</span> <span class="hl com">/* Get the current dimensions into swizzled_dim array */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sget_simple_extent_dims</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> swizzled_dim<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Generate the swizzled dimensions */</span> <span class="hl kwd">H5VM_swizzle_coords</span><span class="hl opt">(</span>hsize_t<span class="hl opt">,</span> swizzled_dim<span class="hl opt">,</span> unlim_dim<span class="hl opt">);</span> <span class="hl com">/* Compute the "down" dimension values */</span> <span class="hl kwd">H5VM_array_down</span><span class="hl opt">(</span>ndims<span class="hl opt">,</span> swizzled_dim<span class="hl opt">,</span> down<span class="hl opt">);</span> <span class="hl com">/* Read elements */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>u <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> u <span class="hl opt"><</span> npoints<span class="hl opt">;</span> u<span class="hl opt">++) {</span> <span class="hl com">/* Compute the coordinate from the linear offset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5VM_array_calc_pre</span><span class="hl opt">(</span>u<span class="hl opt">,</span> ndims<span class="hl opt">,</span> down<span class="hl opt">,</span> hs_offset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Unswizzle hyperslab offset in same way as swizzled dimensions */</span> <span class="hl kwd">H5VM_unswizzle_coords</span><span class="hl opt">(</span>hsize_t<span class="hl opt">,</span> hs_offset<span class="hl opt">,</span> unlim_dim<span class="hl opt">);</span> <span class="hl com">/* Select a single element in the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> hs_offset<span class="hl opt">,</span> NULL<span class="hl opt">,</span> hs_size<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read written element from dataset */</span> read_elem <span class="hl opt">= (</span><span class="hl kwb">unsigned</span><span class="hl opt">)(</span>u <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>read_elem<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify written element is correct */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>read_elem <span class="hl opt">!=</span> u<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"invalid element read"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/* Close everything */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Re-open file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fopen</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_RDWR<span class="hl opt">,</span> my_fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Delete dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Ldelete</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close everything */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/* Close everything */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/* Close everything */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>scalar_sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>scalar_sid<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>my_fapl<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_chunk_fast() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_reopen_chunk_fast</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: To verify a bug in extensible arrays as chunk index.</span> <span class="hl com"> * When the dataset is closed in H5D_close(), the pointer</span> <span class="hl com"> * to the extensible array struct in the layout message</span> <span class="hl com"> * is copied via H5D_flush_real() before H5D_chunk_dest().</span> <span class="hl com"> * This causes an abort from "Assertion `ea->hdr' failed."</span> <span class="hl com"> * later when the dataset is re-opened and read.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Vailin Choi</span> <span class="hl com"> * April 13, 2009</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_reopen_chunk_fast</span><span class="hl opt">(</span>hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> hid_t fid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* File ID */</span> hid_t dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset creation property list ID */</span> hid_t sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataspace ID */</span> hid_t scalar_sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Scalar dataspace ID */</span> hid_t dsid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset ID */</span> hsize_t dim<span class="hl opt">,</span> max_dim<span class="hl opt">,</span> chunk_dim<span class="hl opt">;</span> <span class="hl com">/* Dataset and chunk dimensions */</span> hsize_t hs_offset<span class="hl opt">;</span> <span class="hl com">/* Hyperslab offset */</span> hsize_t hs_size<span class="hl opt">;</span> <span class="hl com">/* Hyperslab size */</span> H5D_alloc_time_t alloc_time<span class="hl opt">;</span> <span class="hl com">/* Storage allocation time */</span> <span class="hl kwb">unsigned</span> write_elem<span class="hl opt">,</span> read_elem<span class="hl opt">;</span> <span class="hl com">/* Element written/read */</span> <span class="hl kwb">unsigned</span> u<span class="hl opt">;</span> <span class="hl com">/* Local index variable */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"datasets w/extensible array open/reopen with read/write"</span><span class="hl opt">);</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">10</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> filename<span class="hl opt">);</span> <span class="hl com">/* Loop over storage allocation time */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>alloc_time <span class="hl opt">=</span> H5D_ALLOC_TIME_EARLY<span class="hl opt">;</span> alloc_time <span class="hl opt"><=</span> H5D_ALLOC_TIME_INCR<span class="hl opt">;</span> alloc_time<span class="hl opt">++) {</span> <span class="hl com">/* Create file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set chunking */</span> chunk_dim <span class="hl opt">=</span> <span class="hl num">10</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">, &</span>chunk_dim<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set fill time */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fill_time</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> H5D_FILL_TIME_ALLOC<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set allocation time */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_alloc_time</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> alloc_time<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create scalar dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>scalar_sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate</span><span class="hl opt">(</span>H5S_SCALAR<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create 1-D dataspace */</span> dim <span class="hl opt">=</span> <span class="hl num">100</span><span class="hl opt">;</span> max_dim <span class="hl opt">=</span> H5S_UNLIMITED<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">, &</span>dim<span class="hl opt">, &</span>max_dim<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create chunked dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset"</span><span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Fill existing elements */</span> hs_size <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>u <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> u <span class="hl opt"><</span> <span class="hl num">100</span><span class="hl opt">;</span> u<span class="hl opt">++) {</span> <span class="hl com">/* Select a single element in the dataset */</span> hs_offset <span class="hl opt">=</span> u<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">, &</span>hs_offset<span class="hl opt">,</span> NULL<span class="hl opt">, &</span>hs_size<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Write element to dataset */</span> write_elem <span class="hl opt">=</span> u<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>write_elem<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/* Close everything */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Reopen the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> hs_size <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Read from dataset */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>u <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> u <span class="hl opt"><</span> <span class="hl num">100</span><span class="hl opt">;</span> u<span class="hl opt">++) {</span> <span class="hl com">/* Select a single element in the dataset */</span> hs_offset <span class="hl opt">=</span> u<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">, &</span>hs_offset<span class="hl opt">,</span> NULL<span class="hl opt">, &</span>hs_size<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read element from dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>read_elem<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>scalar_sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>scalar_sid<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_reopen_chunk_fast() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_chunk_fast_bug1</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Test extensible arrays where the first dimension in the</span> <span class="hl com"> * chunk size is the same as the second dimension in the</span> <span class="hl com"> * dataset size. This helps to confirm that all dimensions</span> <span class="hl com"> * are being "swizzled" correctly in the earray chunk index</span> <span class="hl com"> * code.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Neil Fortner</span> <span class="hl com"> * March 22, 2012</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_chunk_fast_bug1</span><span class="hl opt">(</span>hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> hid_t fid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* File ID */</span> hid_t dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset creation property list ID */</span> hid_t sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataspace ID */</span> hid_t dsid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset ID */</span> hsize_t dim<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">],</span> max_dim<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">],</span> chunk_dim<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Dataset and chunk dimensions */</span> H5D_alloc_time_t alloc_time<span class="hl opt">;</span> <span class="hl com">/* Storage allocation time */</span> <span class="hl kwb">unsigned</span> <span class="hl opt">**</span>wbuf <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">unsigned</span> <span class="hl opt">**</span>rbuf <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">unsigned</span> <span class="hl opt">*</span> wbuf_bytes <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">unsigned</span> <span class="hl opt">*</span> rbuf_bytes <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">unsigned</span> i<span class="hl opt">,</span> j<span class="hl opt">;</span> <span class="hl com">/* Local index variables */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"datasets w/extensible array chunk indexing bug"</span><span class="hl opt">);</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">10</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> filename<span class="hl opt">);</span> <span class="hl com">/* Set up data array */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>wbuf_bytes <span class="hl opt">= (</span><span class="hl kwb">unsigned</span> <span class="hl opt">*)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span><span class="hl num">40</span> <span class="hl opt">*</span> <span class="hl num">20</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">unsigned</span><span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>wbuf <span class="hl opt">= (</span><span class="hl kwb">unsigned</span> <span class="hl opt">**)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span><span class="hl num">40</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>wbuf_bytes<span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl num">40</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">] =</span> wbuf_bytes <span class="hl opt">+ (</span>i <span class="hl opt">*</span> <span class="hl num">20</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>rbuf_bytes <span class="hl opt">= (</span><span class="hl kwb">unsigned</span> <span class="hl opt">*)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span><span class="hl num">40</span> <span class="hl opt">*</span> <span class="hl num">20</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">unsigned</span><span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>rbuf <span class="hl opt">= (</span><span class="hl kwb">unsigned</span> <span class="hl opt">**)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span><span class="hl num">40</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>rbuf_bytes<span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl num">40</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> rbuf<span class="hl opt">[</span>i<span class="hl opt">] =</span> rbuf_bytes <span class="hl opt">+ (</span>i <span class="hl opt">*</span> <span class="hl num">20</span><span class="hl opt">);</span> <span class="hl com">/* Initialize write buffer */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl num">40</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> <span class="hl num">20</span><span class="hl opt">;</span> j<span class="hl opt">++)</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] = (</span>i <span class="hl opt">*</span> <span class="hl num">20</span><span class="hl opt">) +</span> j<span class="hl opt">;</span> <span class="hl com">/* Create 2-D dataspace */</span> dim<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">40</span><span class="hl opt">;</span> dim<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">20</span><span class="hl opt">;</span> max_dim<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">40</span><span class="hl opt">;</span> max_dim<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> H5S_UNLIMITED<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dim<span class="hl opt">,</span> max_dim<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Loop over storage allocation time */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>alloc_time <span class="hl opt">=</span> H5D_ALLOC_TIME_EARLY<span class="hl opt">;</span> alloc_time <span class="hl opt"><=</span> H5D_ALLOC_TIME_INCR<span class="hl opt">;</span> alloc_time<span class="hl opt">++) {</span> <span class="hl com">/* Create file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set chunking */</span> chunk_dim<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">20</span><span class="hl opt">;</span> chunk_dim<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">10</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_dim<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set allocation time */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_alloc_time</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> alloc_time<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create chunked dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset"</span><span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Write buffer to dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> wbuf_bytes<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close everything */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Reopen the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read from dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> rbuf_bytes<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify read data */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl num">40</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> <span class="hl num">20</span><span class="hl opt">;</span> j<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>wbuf<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] !=</span> rbuf<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">])</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"invalid element read"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>wbuf<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rbuf<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>wbuf_bytes<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rbuf_bytes<span class="hl opt">);</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>wbuf<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rbuf<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>wbuf_bytes<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rbuf_bytes<span class="hl opt">);</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_chunk_fast_bug1() */</span> <span class="hl com">/* This message derives from H5Z */</span> <span class="hl kwb">const</span> H5Z_class2_t H5Z_EXPAND<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {{</span> H5Z_CLASS_T_VERS<span class="hl opt">,</span> <span class="hl com">/* H5Z_class_t version */</span> H5Z_FILTER_EXPAND<span class="hl opt">,</span> <span class="hl com">/* Filter id number */</span> <span class="hl num">1</span><span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> <span class="hl com">/* Encoding and decoding enabled */</span> <span class="hl str">"expand"</span><span class="hl opt">,</span> <span class="hl com">/* Filter name for debugging */</span> NULL<span class="hl opt">,</span> <span class="hl com">/* The "can apply" callback */</span> NULL<span class="hl opt">,</span> <span class="hl com">/* The "set local" callback */</span> filter_expand<span class="hl opt">,</span> <span class="hl com">/* The actual filter function */</span> <span class="hl opt">}};</span> <span class="hl com">/* Global "expansion factor" for filter_expand() routine */</span> <span class="hl kwb">static size_t</span> filter_expand_factor_g <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: filter_expand</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: For testing library's behavior when a filter expands a chunk</span> <span class="hl com"> * too much.</span> <span class="hl com"> *</span> <span class="hl com"> * Note: This filter doesn't actually re-allocate the buffer to be</span> <span class="hl com"> * larger, it just changes the buffer size to a value that's too</span> <span class="hl com"> * large. The library should throw an error before using the</span> <span class="hl com"> * incorrect buffer information.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: Data chunk size</span> <span class="hl com"> * Failure: 0</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Quincey Koziol</span> <span class="hl com"> * Mar 31, 2009</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static size_t</span> <span class="hl kwd">filter_expand</span><span class="hl opt">(</span><span class="hl kwb">unsigned int</span> flags<span class="hl opt">,</span> <span class="hl kwb">size_t</span> H5_ATTR_UNUSED cd_nelmts<span class="hl opt">,</span> <span class="hl kwb">const unsigned int</span> H5_ATTR_UNUSED <span class="hl opt">*</span>cd_values<span class="hl opt">,</span> <span class="hl kwb">size_t</span> nbytes<span class="hl opt">,</span> <span class="hl kwb">size_t</span> <span class="hl opt">*</span>buf_size<span class="hl opt">,</span> <span class="hl kwb">void</span> H5_ATTR_UNUSED <span class="hl opt">**</span>buf<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">size_t</span> ret_value <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>flags <span class="hl opt">&</span> H5Z_FLAG_REVERSE<span class="hl opt">) {</span> <span class="hl com">/* Don't do anything when filter is applied in reverse */</span> <span class="hl opt">*</span>buf_size <span class="hl opt">=</span> nbytes<span class="hl opt">;</span> ret_value <span class="hl opt">=</span> nbytes<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl com">/* Check for expanding the chunk */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>filter_expand_factor_g <span class="hl opt">></span> <span class="hl num">0</span><span class="hl opt">) {</span> <span class="hl com">/* Expand the buffer size beyond what can be encoded */</span> <span class="hl opt">*</span>buf_size <span class="hl opt">=</span> nbytes <span class="hl opt">*</span> <span class="hl num">256</span> <span class="hl opt">*</span> <span class="hl num">256</span> <span class="hl opt">*</span> <span class="hl num">256</span> <span class="hl opt">*</span> filter_expand_factor_g<span class="hl opt">;</span> ret_value <span class="hl opt">= *</span>buf_size<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl com">/* Don't expand the chunk's size */</span> <span class="hl opt">*</span>buf_size <span class="hl opt">=</span> nbytes<span class="hl opt">;</span> ret_value <span class="hl opt">=</span> nbytes<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> <span class="hl kwa">return</span> ret_value<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end filter_expand() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_chunk_expand</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests support for proper error handling when a chunk expands</span> <span class="hl com"> * too much after a filter is applied</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Quincey Koziol</span> <span class="hl com"> * Tuesday, March 31, 2009</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_chunk_expand</span><span class="hl opt">(</span>hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> hid_t fid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* File ID */</span> hid_t dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> dcpl2 <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset creation property list ID */</span> hid_t sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> sid2 <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataspace ID */</span> hid_t scalar_sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Scalar dataspace ID */</span> hid_t dsid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> dsid2 <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset ID */</span> hsize_t dim<span class="hl opt">,</span> max_dim<span class="hl opt">,</span> chunk_dim<span class="hl opt">;</span> <span class="hl com">/* Dataset and chunk dimensions */</span> hsize_t dim2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">],</span> max_dim2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">],</span> chunk_dim2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Dataset and chunk dimensions */</span> H5D_chunk_index_t idx_type<span class="hl opt">,</span> idx_type2<span class="hl opt">;</span> <span class="hl com">/* Dataset chunk index type */</span> H5F_libver_t low<span class="hl opt">,</span> high<span class="hl opt">;</span> <span class="hl com">/* File format bounds */</span> hsize_t hs_offset<span class="hl opt">,</span> hs_offset2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Hyperslab offset */</span> hsize_t hs_size<span class="hl opt">,</span> hs_size2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Hyperslab size */</span> H5D_alloc_time_t alloc_time<span class="hl opt">;</span> <span class="hl com">/* Storage allocation time */</span> <span class="hl kwb">unsigned</span> write_elem<span class="hl opt">,</span> read_elem<span class="hl opt">;</span> <span class="hl com">/* Element written/read */</span> <span class="hl kwb">unsigned</span> write_elem2<span class="hl opt">,</span> read_elem2<span class="hl opt">;</span> <span class="hl com">/* Element written/read */</span> <span class="hl kwb">unsigned</span> u<span class="hl opt">;</span> <span class="hl com">/* Local index variable */</span> herr_t status<span class="hl opt">;</span> <span class="hl com">/* Generic return value */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"filter expanding chunks too much"</span><span class="hl opt">);</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">11</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> filename<span class="hl opt">);</span> <span class="hl com">/* Check if we are using the latest version of the format */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_libver_bounds</span><span class="hl opt">(</span>fapl<span class="hl opt">, &</span>low<span class="hl opt">, &</span>high<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">size_t</span><span class="hl opt">) <=</span> <span class="hl num">4</span> <span class="hl opt">&&</span> low <span class="hl opt">!=</span> H5F_LIBVER_LATEST<span class="hl opt">) {</span> <span class="hl kwd">SKIPPED</span><span class="hl opt">();</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" Current machine can't test for error w/old file format"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl com">/* Register "expansion" filter */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Zregister</span><span class="hl opt">(</span>H5Z_EXPAND<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Check that the filter was registered */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>TRUE <span class="hl opt">!=</span> <span class="hl kwd">H5Zfilter_avail</span><span class="hl opt">(</span>H5Z_FILTER_EXPAND<span class="hl opt">))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Loop over storage allocation time */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>alloc_time <span class="hl opt">=</span> H5D_ALLOC_TIME_EARLY<span class="hl opt">;</span> alloc_time <span class="hl opt"><=</span> H5D_ALLOC_TIME_INCR<span class="hl opt">;</span> alloc_time<span class="hl opt">++) {</span> <span class="hl com">/* Create file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl2 <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set chunking */</span> chunk_dim <span class="hl opt">=</span> chunk_dim2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> chunk_dim2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">10</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">, &</span>chunk_dim<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl2<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_dim2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set fill time */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fill_time</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> H5D_FILL_TIME_ALLOC<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fill_time</span><span class="hl opt">(</span>dcpl2<span class="hl opt">,</span> H5D_FILL_TIME_ALLOC<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set allocation time */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_alloc_time</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> alloc_time<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_alloc_time</span><span class="hl opt">(</span>dcpl2<span class="hl opt">,</span> alloc_time<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set "expand" filter */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_filter</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> H5Z_FILTER_EXPAND<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">0</span><span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_filter</span><span class="hl opt">(</span>dcpl2<span class="hl opt">,</span> H5Z_FILTER_EXPAND<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">0</span><span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create scalar dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>scalar_sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate</span><span class="hl opt">(</span>H5S_SCALAR<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create 1-D and 2-D dataspace */</span> dim <span class="hl opt">=</span> dim2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> dim2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">100</span><span class="hl opt">;</span> max_dim <span class="hl opt">=</span> max_dim2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> max_dim2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> H5S_UNLIMITED<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">, &</span>dim<span class="hl opt">, &</span>max_dim<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid2 <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dim2<span class="hl opt">,</span> max_dim2<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create 1-D & 2-D chunked datasets */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>H5D_ALLOC_TIME_EARLY <span class="hl opt">==</span> alloc_time<span class="hl opt">) {</span> <span class="hl com">/* Make the expansion factor large enough to cause failure right away */</span> filter_expand_factor_g <span class="hl opt">=</span> <span class="hl num">8</span><span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset"</span><span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dsid <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should fail to create dataset when allocation time is early"</span><span class="hl opt">);</span> H5E_BEGIN_TRY <span class="hl opt">{</span> dsid2 <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset2"</span><span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> sid2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dsid2 <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should fail to create dataset when allocation time is early"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset"</span><span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid2 <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset2"</span><span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> sid2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the chunk index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>dsid<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>dsid2<span class="hl opt">, &</span>idx_type2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Chunk index type expected depends on whether we are using the latest version of the format</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>low <span class="hl opt">==</span> H5F_LIBVER_LATEST<span class="hl opt">) {</span> <span class="hl com">/* Verify index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_EARRAY<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using extensible array as index"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type2 <span class="hl opt">!=</span> H5D_CHUNK_IDX_BT2<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v2 B-tree as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl com">/* Verify index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_BTREE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v1 B-tree as index"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type2 <span class="hl opt">!=</span> H5D_CHUNK_IDX_BTREE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v1 B-tree as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> <span class="hl com">/* Fill elements */</span> hs_size <span class="hl opt">=</span> hs_size2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> hs_size2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>u <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> u <span class="hl opt"><</span> <span class="hl num">100</span><span class="hl opt">;</span> u<span class="hl opt">++) {</span> hs_offset <span class="hl opt">=</span> hs_offset2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> hs_offset2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> u<span class="hl opt">;</span> <span class="hl com">/* Select a single element in the 1-D dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">, &</span>hs_offset<span class="hl opt">,</span> NULL<span class="hl opt">, &</span>hs_size<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Select a single element in the 2-D dataset; NOT every element is selected */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid2<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> hs_offset2<span class="hl opt">,</span> NULL<span class="hl opt">,</span> hs_size2<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read (unwritten) element from dataset */</span> read_elem <span class="hl opt">=</span> read_elem2 <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>read_elem<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid2<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>read_elem2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify unwritten element is fill value (0) */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>read_elem <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"invalid unwritten element read"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>read_elem2 <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"invalid unwritten element read"</span><span class="hl opt">);</span> <span class="hl com">/* Don't expand chunks yet */</span> filter_expand_factor_g <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl com">/* Write element to the datasets */</span> write_elem <span class="hl opt">=</span> write_elem2 <span class="hl opt">=</span> u<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>write_elem<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid2<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>write_elem2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read element from the datasets */</span> read_elem <span class="hl opt">=</span> write_elem <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">;</span> read_elem2 <span class="hl opt">=</span> write_elem2 <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>read_elem<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid2<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>read_elem2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify written element is read in */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>read_elem <span class="hl opt">!=</span> write_elem<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"invalid written element read"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>read_elem2 <span class="hl opt">!=</span> write_elem2<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"invalid written element read"</span><span class="hl opt">);</span> <span class="hl com">/* Expand chunks now */</span> filter_expand_factor_g <span class="hl opt">=</span> <span class="hl num">8</span><span class="hl opt">;</span> <span class="hl com">/* Write element to the datasets */</span> write_elem <span class="hl opt">=</span> write_elem2 <span class="hl opt">=</span> u<span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>write_elem<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should fail to write to dataset when allocation time is not early"</span><span class="hl opt">);</span> H5E_BEGIN_TRY <span class="hl opt">{</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid2<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>write_elem2<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should fail to write to dataset when allocation time is not early"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/* Incrementally extend dataset and verify write/reads */</span> <span class="hl kwa">while</span> <span class="hl opt">(</span>dim <span class="hl opt"><</span> <span class="hl num">1000</span><span class="hl opt">) {</span> <span class="hl com">/* Extend the datasets */</span> dim <span class="hl opt">+=</span> <span class="hl num">100</span><span class="hl opt">;</span> dim2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] +=</span> <span class="hl num">100</span><span class="hl opt">;</span> dim2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] +=</span> <span class="hl num">100</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dset_extent</span><span class="hl opt">(</span>dsid<span class="hl opt">, &</span>dim<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dset_extent</span><span class="hl opt">(</span>dsid2<span class="hl opt">,</span> dim2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close old dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get dataspace for the datasets now */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Dget_space</span><span class="hl opt">(</span>dsid<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid2 <span class="hl opt">=</span> <span class="hl kwd">H5Dget_space</span><span class="hl opt">(</span>dsid2<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Fill new elements */</span> hs_size <span class="hl opt">=</span> hs_size2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> hs_size2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>u <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> u <span class="hl opt"><</span> <span class="hl num">100</span><span class="hl opt">;</span> u<span class="hl opt">++) {</span> <span class="hl com">/* Select a single element in the datasets */</span> hs_offset <span class="hl opt">= (</span>dim <span class="hl opt">+</span> u<span class="hl opt">) -</span> <span class="hl num">100</span><span class="hl opt">;</span> hs_offset2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] = (</span>dim2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] +</span> u<span class="hl opt">) -</span> <span class="hl num">100</span><span class="hl opt">;</span> hs_offset2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = (</span>dim2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] +</span> u<span class="hl opt">) -</span> <span class="hl num">100</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">, &</span>hs_offset<span class="hl opt">,</span> NULL<span class="hl opt">, &</span>hs_size<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid2<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> hs_offset2<span class="hl opt">,</span> NULL<span class="hl opt">,</span> hs_size2<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read (unwritten) element from the datasets */</span> read_elem <span class="hl opt">=</span> read_elem2 <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>read_elem<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid2<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>read_elem2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify unwritten element is fill value (0) */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>read_elem <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"invalid unwritten element read"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>read_elem2 <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"invalid unwritten element read"</span><span class="hl opt">);</span> <span class="hl com">/* Don't expand chunks yet */</span> filter_expand_factor_g <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl com">/* Write element to the datasets */</span> write_elem <span class="hl opt">=</span> write_elem2 <span class="hl opt">=</span> u<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>write_elem<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid2<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>write_elem2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read element from the datasets */</span> read_elem <span class="hl opt">=</span> write_elem <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">;</span> read_elem2 <span class="hl opt">=</span> write_elem2 <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>read_elem<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid2<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>read_elem2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify written element is read in */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>read_elem <span class="hl opt">!=</span> write_elem<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"invalid written element read"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>read_elem2 <span class="hl opt">!=</span> write_elem2<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"invalid written element read"</span><span class="hl opt">);</span> <span class="hl com">/* Expand chunks now */</span> filter_expand_factor_g <span class="hl opt">=</span> <span class="hl num">8</span><span class="hl opt">;</span> <span class="hl com">/* Write element to the datasets */</span> write_elem <span class="hl opt">=</span> write_elem2 <span class="hl opt">=</span> u<span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>write_elem<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span> <span class="hl str">"should fail to write to dataset when allocation time is not early"</span><span class="hl opt">);</span> H5E_BEGIN_TRY <span class="hl opt">{</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid2<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>write_elem2<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span> <span class="hl str">"should fail to write to dataset when allocation time is not early"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl opt">}</span> <span class="hl com">/* end while */</span> <span class="hl com">/* Close the datasets */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> <span class="hl com">/* Close everything */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>scalar_sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* If the dataset was created, do some extra testing */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>H5D_ALLOC_TIME_EARLY <span class="hl opt">!=</span> alloc_time<span class="hl opt">) {</span> <span class="hl com">/* Re-open file & datasets */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fopen</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_RDWR<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open the datasets */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid2 <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset2"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the chunk index type for the two datasets */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>dsid<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>dsid2<span class="hl opt">, &</span>idx_type2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Chunk index type expected depends on whether we are using the latest version of the format</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>low <span class="hl opt">==</span> H5F_LIBVER_LATEST<span class="hl opt">) {</span> <span class="hl com">/* Verify index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_EARRAY<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using extensible array as index"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type2 <span class="hl opt">!=</span> H5D_CHUNK_IDX_BT2<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v2 B-tree as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl com">/* Verify index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_BTREE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v1 B-tree as index"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type2 <span class="hl opt">!=</span> H5D_CHUNK_IDX_BTREE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v1 B-tree as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> <span class="hl com">/* Create scalar dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>scalar_sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate</span><span class="hl opt">(</span>H5S_SCALAR<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get dataspace for the datasets now */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Dget_space</span><span class="hl opt">(</span>dsid<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid2 <span class="hl opt">=</span> <span class="hl kwd">H5Dget_space</span><span class="hl opt">(</span>dsid2<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read elements */</span> hs_size <span class="hl opt">=</span> hs_size2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> hs_size2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>u <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> u <span class="hl opt"><</span> <span class="hl num">1000</span><span class="hl opt">;</span> u<span class="hl opt">++) {</span> <span class="hl com">/* Select a single element in the datasets */</span> hs_offset <span class="hl opt">=</span> hs_offset2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> hs_offset2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> u<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">, &</span>hs_offset<span class="hl opt">,</span> NULL<span class="hl opt">, &</span>hs_size<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid2<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> hs_offset2<span class="hl opt">,</span> NULL<span class="hl opt">,</span> hs_size2<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read element from the datasets */</span> read_elem <span class="hl opt">=</span> read_elem2 <span class="hl opt">=</span> u <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>read_elem<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid2<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>read_elem2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify unwritten element is proper value */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>read_elem <span class="hl opt">!= (</span>u <span class="hl opt">%</span> <span class="hl num">100</span><span class="hl opt">))</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"invalid element read"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>read_elem2 <span class="hl opt">!= (</span>u <span class="hl opt">%</span> <span class="hl num">100</span><span class="hl opt">))</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"invalid element read"</span><span class="hl opt">);</span> <span class="hl com">/* Don't expand chunks yet */</span> filter_expand_factor_g <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl com">/* Write element to the datasets */</span> write_elem <span class="hl opt">=</span> write_elem2 <span class="hl opt">=</span> u <span class="hl opt">%</span> <span class="hl num">100</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>write_elem<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid2<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>write_elem2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read element from the datasets */</span> read_elem <span class="hl opt">=</span> write_elem <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">;</span> read_elem2 <span class="hl opt">=</span> write_elem2 <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>read_elem<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid2<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>read_elem2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify written element is read in */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>read_elem <span class="hl opt">!=</span> write_elem<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"invalid written element read"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>read_elem2 <span class="hl opt">!=</span> write_elem2<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"invalid written element read"</span><span class="hl opt">);</span> <span class="hl com">/* Expand chunks now */</span> filter_expand_factor_g <span class="hl opt">=</span> <span class="hl num">8</span><span class="hl opt">;</span> <span class="hl com">/* Write element to the datasets */</span> write_elem <span class="hl opt">=</span> write_elem2 <span class="hl opt">=</span> u <span class="hl opt">%</span> <span class="hl num">100</span><span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>write_elem<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should fail to write to dataset when allocation time is not early"</span><span class="hl opt">);</span> H5E_BEGIN_TRY <span class="hl opt">{</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid2<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>write_elem2<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should fail to write to dataset when allocation time is not early"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/* Close everything */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>scalar_sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Re-open file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fopen</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_RDWR<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Delete the datasets */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Ldelete</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Ldelete</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset2"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close everything */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/* Unregister "expansion" filter */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Zunregister</span><span class="hl opt">(</span>H5Z_FILTER_EXPAND<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Check that the filter was unregistered */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>FALSE <span class="hl opt">!=</span> <span class="hl kwd">H5Zfilter_avail</span><span class="hl opt">(</span>H5Z_FILTER_EXPAND<span class="hl opt">))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl2<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid2<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid2<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>scalar_sid<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_chunk_expand() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_fixed_array</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests support for Fixed Array and Implicit Indexing</span> <span class="hl com"> *</span> <span class="hl com"> * Create the following 3 datasets:</span> <span class="hl com"> * 1) extendible chunked dataset with fixed max. dims</span> <span class="hl com"> * 2) extendible chunked dataset with NULL max. dims</span> <span class="hl com"> * 3) extendible chunked dataset with same max. dims</span> <span class="hl com"> * (Note that the third dataset is created with bigger size for curr & max. dims</span> <span class="hl com"> * so that Fixed Array Indexing with paging is exercised)</span> <span class="hl com"> *</span> <span class="hl com"> * Repeat the following test with/without compression filter</span> <span class="hl com"> * Repeat the following test with H5D_ALLOC_TIME_EARLY/H5D_ALLOC_TIME_LATE/H5D_ALLOC_TIME_INCR</span> <span class="hl com"> * For the old format,</span> <span class="hl com"> * verify that v1 btree indexing type is used for</span> <span class="hl com"> * all 3 datasets with all settings</span> <span class="hl com"> * For the new format:</span> <span class="hl com"> * Verify that Implicit Index type is used for</span> <span class="hl com"> * #1, #2, #3 datasets when ALLOC_TIME_EARLY and compression are true</span> <span class="hl com"> * Verify Fixed Array indexing type is used for</span> <span class="hl com"> * #1, #2, #3 datasets with all other settings</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Vailin Choi; 2009</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_fixed_array</span><span class="hl opt">(</span>hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> <span class="hl com">/* File name */</span> hid_t fid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* File ID */</span> hid_t dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset creation property list ID */</span> hid_t sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataspace ID for dataset with fixed dimensions */</span> hid_t sid_big <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataspate ID for big dataset */</span> hid_t sid_max <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataspace ID for dataset with maximum dimensions set */</span> hid_t dsid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset ID for dataset with fixed dimensions */</span> hid_t dsid_big <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset ID for big dataset with fixed dimensions */</span> hid_t dsid_max <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset ID for dataset with maximum dimensions set */</span> hsize_t dim2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">48</span><span class="hl opt">,</span> <span class="hl num">18</span><span class="hl opt">};</span> <span class="hl com">/* Dataset dimensions */</span> <span class="hl kwb">const</span> hsize_t dim2_big<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">500</span><span class="hl opt">,</span> <span class="hl num">60</span><span class="hl opt">};</span> <span class="hl com">/* Big dataset dimensions */</span> hsize_t dim2_max<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">120</span><span class="hl opt">,</span> <span class="hl num">50</span><span class="hl opt">};</span> <span class="hl com">/* Maximum dataset dimensions */</span> hid_t mem_id <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> <span class="hl com">/* Memory space ID */</span> hid_t big_mem_id<span class="hl opt">;</span> <span class="hl com">/* Memory space ID for big dataset */</span> hsize_t msize<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span>POINTS<span class="hl opt">};</span> <span class="hl com">/* Size of memory space */</span> hsize_t msize_big<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span>POINTS_BIG<span class="hl opt">};</span> <span class="hl com">/* Size of memory space for big dataset */</span> <span class="hl kwb">int</span> wbuf<span class="hl opt">[</span>POINTS<span class="hl opt">];</span> <span class="hl com">/* write buffer */</span> <span class="hl kwb">int</span> <span class="hl opt">*</span>wbuf_big <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl com">/* write buffer for big dataset */</span> <span class="hl kwb">int</span> rbuf<span class="hl opt">[</span>POINTS<span class="hl opt">];</span> <span class="hl com">/* read buffer */</span> <span class="hl kwb">int</span> <span class="hl opt">*</span>rbuf_big <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl com">/* read buffer for big dataset */</span> <span class="hl kwb">const</span> hsize_t chunk_dim2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">4</span><span class="hl opt">,</span> <span class="hl num">3</span><span class="hl opt">};</span> <span class="hl com">/* Chunk dimensions */</span> <span class="hl kwb">int</span> <span class="hl opt">**</span>chunks <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl com">/* # of chunks for dataset dimensions */</span> <span class="hl kwb">int</span> <span class="hl opt">**</span>chunks_big <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl com">/* # of chunks for big dataset dimensions */</span> <span class="hl kwb">int</span> <span class="hl opt">*</span> chunks_bytes <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">int</span> <span class="hl opt">*</span> chunks_big_bytes <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwb">int</span> chunk_row<span class="hl opt">;</span> <span class="hl com">/* chunk row index */</span> <span class="hl kwb">int</span> chunk_col<span class="hl opt">;</span> <span class="hl com">/* chunk column index */</span> hsize_t <span class="hl opt">**</span>coord <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl com">/* datdaset coordinates */</span> hsize_t <span class="hl opt">**</span>coord_big <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl com">/* big datdaset coordinates */</span> hsize_t <span class="hl opt">*</span> coord_bytes <span class="hl opt">=</span> NULL<span class="hl opt">;</span> hsize_t <span class="hl opt">*</span> coord_big_bytes <span class="hl opt">=</span> NULL<span class="hl opt">;</span> H5D_chunk_index_t idx_type<span class="hl opt">;</span> <span class="hl com">/* Dataset chunk index type */</span> H5F_libver_t low<span class="hl opt">,</span> high<span class="hl opt">;</span> <span class="hl com">/* File format bounds */</span> H5D_alloc_time_t alloc_time<span class="hl opt">;</span> <span class="hl com">/* Storage allocation time */</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_DEFLATE</span> <span class="hl kwb">unsigned</span> compress<span class="hl opt">;</span> <span class="hl com">/* Whether chunks should be compressed */</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_DEFLATE */</span><span class="hl ppc"></span> h5_stat_size_t empty_size<span class="hl opt">;</span> <span class="hl com">/* Size of an empty file */</span> h5_stat_size_t file_size<span class="hl opt">;</span> <span class="hl com">/* Size of each file created */</span> <span class="hl kwb">size_t</span> i<span class="hl opt">,</span> j<span class="hl opt">;</span> <span class="hl com">/* local index variables */</span> herr_t ret<span class="hl opt">;</span> <span class="hl com">/* Generic return value */</span> <span class="hl kwb">long</span> ofs<span class="hl opt">,</span> inc<span class="hl opt">;</span> <span class="hl kwb">long</span> rows<span class="hl opt">;</span> <span class="hl kwb">long</span> cols<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"datasets w/fixed array as chunk index"</span><span class="hl opt">);</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">12</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> filename<span class="hl opt">);</span> <span class="hl com">/* Set up 2D data arrays */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>chunks_bytes <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">*)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span><span class="hl num">12</span> <span class="hl opt">*</span> <span class="hl num">6</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>chunks <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">**)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span><span class="hl num">12</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>chunks_bytes<span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl num">12</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> chunks<span class="hl opt">[</span>i<span class="hl opt">] =</span> chunks_bytes <span class="hl opt">+ (</span>i <span class="hl opt">*</span> <span class="hl num">6</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>chunks_big_bytes <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">*)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span><span class="hl num">125</span> <span class="hl opt">*</span> <span class="hl num">20</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>chunks_big <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">**)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span><span class="hl num">125</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>chunks_big_bytes<span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl num">125</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> chunks_big<span class="hl opt">[</span>i<span class="hl opt">] =</span> chunks_big_bytes <span class="hl opt">+ (</span>i <span class="hl opt">*</span> <span class="hl num">20</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>coord_bytes <span class="hl opt">= (</span>hsize_t <span class="hl opt">*)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>POINTS <span class="hl opt">*</span> <span class="hl num">2</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>hsize_t<span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>coord <span class="hl opt">= (</span>hsize_t <span class="hl opt">**)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>POINTS<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>coord_bytes<span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> POINTS<span class="hl opt">;</span> i<span class="hl opt">++)</span> coord<span class="hl opt">[</span>i<span class="hl opt">] =</span> coord_bytes <span class="hl opt">+ (</span>i <span class="hl opt">*</span> <span class="hl num">2</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>coord_big_bytes <span class="hl opt">= (</span>hsize_t <span class="hl opt">*)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>POINTS_BIG <span class="hl opt">*</span> <span class="hl num">2</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>hsize_t<span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>coord_big <span class="hl opt">= (</span>hsize_t <span class="hl opt">**)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>POINTS_BIG<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>coord_big_bytes<span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> POINTS_BIG<span class="hl opt">;</span> i<span class="hl opt">++)</span> coord_big<span class="hl opt">[</span>i<span class="hl opt">] =</span> coord_big_bytes <span class="hl opt">+ (</span>i <span class="hl opt">*</span> <span class="hl num">2</span><span class="hl opt">);</span> <span class="hl com">/* Check if we are using the latest version of the format */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_libver_bounds</span><span class="hl opt">(</span>fapl<span class="hl opt">, &</span>low<span class="hl opt">, &</span>high<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create and close the file to get the file size */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the size of the empty file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>empty_size <span class="hl opt">=</span> <span class="hl kwd">h5_get_file_size</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Allocate the "big" buffers */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>wbuf_big <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">*)</span><span class="hl kwd">HDmalloc</span><span class="hl opt">(</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> POINTS_BIG<span class="hl opt">)))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>rbuf_big <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">*)</span><span class="hl kwd">HDmalloc</span><span class="hl opt">(</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> POINTS_BIG<span class="hl opt">)))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_DEFLATE</span> <span class="hl com">/* Loop over compressing chunks */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>compress <span class="hl opt">=</span> FALSE<span class="hl opt">;</span> compress <span class="hl opt"><=</span> TRUE<span class="hl opt">;</span> compress<span class="hl opt">++) {</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_DEFLATE */</span><span class="hl ppc"></span> <span class="hl com">/* Loop over storage allocation time */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>alloc_time <span class="hl opt">=</span> H5D_ALLOC_TIME_EARLY<span class="hl opt">;</span> alloc_time <span class="hl opt"><=</span> H5D_ALLOC_TIME_INCR<span class="hl opt">;</span> alloc_time<span class="hl opt">++) {</span> <span class="hl com">/* Create file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set chunking */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>ret <span class="hl opt">=</span> <span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_dim2<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">" Problem with setting chunk."</span><span class="hl opt">);</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_DEFLATE</span> <span class="hl com">/* Check if we should compress the chunks */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>compress<span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_deflate</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">9</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_DEFLATE */</span><span class="hl ppc"></span> <span class="hl com">/* Set fill time */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fill_time</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> H5D_FILL_TIME_ALLOC<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set allocation time */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_alloc_time</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> alloc_time<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialization of chunk array for repeated coordinates */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> dim2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] /</span> chunk_dim2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> dim2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] /</span> chunk_dim2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++)</span> chunks<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] =</span> <span class="hl num">0</span><span class="hl opt">;</span> rows <span class="hl opt">= (</span><span class="hl kwb">long</span><span class="hl opt">)(</span>dim2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] /</span> chunk_dim2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]);</span> cols <span class="hl opt">= (</span><span class="hl kwb">long</span><span class="hl opt">)(</span>dim2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] /</span> chunk_dim2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]);</span> <span class="hl kwd">make_random_offset_and_increment</span><span class="hl opt">(</span>rows <span class="hl opt">*</span> cols<span class="hl opt">, &</span>ofs<span class="hl opt">, &</span>inc<span class="hl opt">);</span> <span class="hl com">/* Generate random point coordinates. Only one point is selected per chunk */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> POINTS<span class="hl opt">;</span> i<span class="hl opt">++) {</span> <span class="hl kwd">H5_CHECKED_ASSIGN</span><span class="hl opt">(</span>chunk_row<span class="hl opt">,</span> <span class="hl kwb">int</span><span class="hl opt">,</span> ofs <span class="hl opt">/</span> cols<span class="hl opt">,</span> <span class="hl kwb">long</span><span class="hl opt">);</span> <span class="hl kwd">H5_CHECKED_ASSIGN</span><span class="hl opt">(</span>chunk_col<span class="hl opt">,</span> <span class="hl kwb">int</span><span class="hl opt">,</span> ofs <span class="hl opt">%</span> cols<span class="hl opt">,</span> <span class="hl kwb">long</span><span class="hl opt">);</span> ofs <span class="hl opt">= (</span>ofs <span class="hl opt">+</span> inc<span class="hl opt">) % (</span>rows <span class="hl opt">*</span> cols<span class="hl opt">);</span> <span class="hl kwd">HDassert</span><span class="hl opt">(!</span>chunks<span class="hl opt">[</span>chunk_row<span class="hl opt">][</span>chunk_col<span class="hl opt">]);</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">] =</span> chunks<span class="hl opt">[</span>chunk_row<span class="hl opt">][</span>chunk_col<span class="hl opt">] =</span> chunk_row <span class="hl opt">+</span> chunk_col <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">;</span> coord<span class="hl opt">[</span>i<span class="hl opt">][</span><span class="hl num">0</span><span class="hl opt">] = (</span>hsize_t<span class="hl opt">)</span>chunk_row <span class="hl opt">*</span> chunk_dim2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> coord<span class="hl opt">[</span>i<span class="hl opt">][</span><span class="hl num">1</span><span class="hl opt">] = (</span>hsize_t<span class="hl opt">)</span>chunk_col <span class="hl opt">*</span> chunk_dim2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/* Create first dataset with cur and max dimensions */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid_max <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dim2<span class="hl opt">,</span> dim2_max<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> dsid_max <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_FIXED_MAX<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid_max<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dsid_max <span class="hl opt"><</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">" Creating Chunked Dataset with maximum dimensions."</span><span class="hl opt">);</span> <span class="hl com">/* Get the chunk index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>dsid_max<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Chunk index type depends on whether we are using the latest version of the format */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>low <span class="hl opt">==</span> H5F_LIBVER_LATEST<span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>alloc_time <span class="hl opt">==</span> H5D_ALLOC_TIME_EARLY <span class="hl ppc">#ifdef H5_HAVE_FILTER_DEFLATE</span> <span class="hl opt">&& !</span>compress <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_DEFLATE */</span><span class="hl ppc"></span> <span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_NONE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using Non Index as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">else if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_FARRAY<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using Fixed Array as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_BTREE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v1 B-tree as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> <span class="hl com">/* Create dataspace for write buffer */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>mem_id <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> msize<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Select the random points for writing */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_elements</span><span class="hl opt">(</span>sid_max<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> POINTS<span class="hl opt">, (</span><span class="hl kwb">const</span> hsize_t <span class="hl opt">*)</span>coord_bytes<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Write into dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid_max<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> mem_id<span class="hl opt">,</span> sid_max<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> wbuf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Closing */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid_max<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid_max<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>mem_id<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create second dataset with curr dim but NULL max dim */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dim2<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_FIXED_NOMAX<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dsid <span class="hl opt"><</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">" Creating Chunked Dataset."</span><span class="hl opt">);</span> <span class="hl com">/* Get the chunk index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>dsid<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Chunk index type depends on whether we are using the latest version of the format */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>low <span class="hl opt">==</span> H5F_LIBVER_LATEST<span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>alloc_time <span class="hl opt">==</span> H5D_ALLOC_TIME_EARLY <span class="hl ppc">#ifdef H5_HAVE_FILTER_DEFLATE</span> <span class="hl opt">&& !</span>compress <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_DEFLATE */</span><span class="hl ppc"></span> <span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_NONE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using Non Index as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">else if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_FARRAY<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using Fixed Array as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_BTREE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v1 B-tree as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> <span class="hl com">/* Create dataspace for write buffer */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>mem_id <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> msize<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Select the random points for writing */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_elements</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> POINTS<span class="hl opt">, (</span><span class="hl kwb">const</span> hsize_t <span class="hl opt">*)</span>coord_bytes<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Write into dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> mem_id<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> wbuf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Closing */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>mem_id<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create the third dataset with bigger size and both curr & max dimensions are the same */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid_big <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dim2_big<span class="hl opt">,</span> dim2_big<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> dsid_big <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_FIXED_BIG<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid_big<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dsid_big <span class="hl opt"><</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">" Creating Big Chunked Dataset."</span><span class="hl opt">);</span> <span class="hl com">/* Get the chunk index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>dsid_big<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Chunk index type depends on whether we are using the latest version of the format */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>low <span class="hl opt">==</span> H5F_LIBVER_LATEST<span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>alloc_time <span class="hl opt">==</span> H5D_ALLOC_TIME_EARLY <span class="hl ppc">#ifdef H5_HAVE_FILTER_DEFLATE</span> <span class="hl opt">&& !</span>compress <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_DEFLATE */</span><span class="hl ppc"></span> <span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_NONE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using Non Index as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">else if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_FARRAY<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using Fixed Array as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_BTREE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v1 B-tree as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> <span class="hl com">/* Initialization of chunk array for repeated coordinates */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> dim2_big<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] /</span> chunk_dim2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> dim2_big<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] /</span> chunk_dim2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++)</span> chunks_big<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] =</span> <span class="hl num">0</span><span class="hl opt">;</span> rows <span class="hl opt">= (</span><span class="hl kwb">long</span><span class="hl opt">)(</span>dim2_big<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] /</span> chunk_dim2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]);</span> cols <span class="hl opt">= (</span><span class="hl kwb">long</span><span class="hl opt">)(</span>dim2_big<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] /</span> chunk_dim2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]);</span> <span class="hl kwd">make_random_offset_and_increment</span><span class="hl opt">(</span>rows <span class="hl opt">*</span> cols<span class="hl opt">, &</span>ofs<span class="hl opt">, &</span>inc<span class="hl opt">);</span> <span class="hl com">/* Generate random point coordinates. Only one point is selected per chunk */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> POINTS_BIG<span class="hl opt">;</span> i<span class="hl opt">++) {</span> <span class="hl kwd">H5_CHECKED_ASSIGN</span><span class="hl opt">(</span>chunk_row<span class="hl opt">,</span> <span class="hl kwb">int</span><span class="hl opt">,</span> ofs <span class="hl opt">/</span> cols<span class="hl opt">,</span> <span class="hl kwb">long</span><span class="hl opt">);</span> <span class="hl kwd">H5_CHECKED_ASSIGN</span><span class="hl opt">(</span>chunk_col<span class="hl opt">,</span> <span class="hl kwb">int</span><span class="hl opt">,</span> ofs <span class="hl opt">%</span> cols<span class="hl opt">,</span> <span class="hl kwb">long</span><span class="hl opt">);</span> ofs <span class="hl opt">= (</span>ofs <span class="hl opt">+</span> inc<span class="hl opt">) % (</span>rows <span class="hl opt">*</span> cols<span class="hl opt">);</span> <span class="hl kwd">HDassert</span><span class="hl opt">(!</span>chunks_big<span class="hl opt">[</span>chunk_row<span class="hl opt">][</span>chunk_col<span class="hl opt">]);</span> wbuf_big<span class="hl opt">[</span>i<span class="hl opt">] =</span> chunks_big<span class="hl opt">[</span>chunk_row<span class="hl opt">][</span>chunk_col<span class="hl opt">] =</span> chunk_row <span class="hl opt">+</span> chunk_col <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">;</span> coord_big<span class="hl opt">[</span>i<span class="hl opt">][</span><span class="hl num">0</span><span class="hl opt">] = (</span>hsize_t<span class="hl opt">)</span>chunk_row <span class="hl opt">*</span> chunk_dim2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> coord_big<span class="hl opt">[</span>i<span class="hl opt">][</span><span class="hl num">1</span><span class="hl opt">] = (</span>hsize_t<span class="hl opt">)</span>chunk_col <span class="hl opt">*</span> chunk_dim2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/* Create dataspace for write buffer */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>big_mem_id <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> msize_big<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Select the random points for writing */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_elements</span><span class="hl opt">(</span>sid_big<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> POINTS_BIG<span class="hl opt">, (</span><span class="hl kwb">const</span> hsize_t <span class="hl opt">*)</span>coord_big_bytes<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Write into dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid_big<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> big_mem_id<span class="hl opt">,</span> sid_big<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> wbuf_big<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Closing */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid_big<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid_big<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>big_mem_id<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open the first dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_FIXED_MAX<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get dataset dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Dget_space</span><span class="hl opt">(</span>dsid<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataspace for read buffer */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>mem_id <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> msize<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Select the random points for reading */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_elements</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> POINTS<span class="hl opt">, (</span><span class="hl kwb">const</span> hsize_t <span class="hl opt">*)</span>coord_bytes<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read from dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> mem_id<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> rbuf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify that written and read data are the same */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> POINTS<span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>rbuf<span class="hl opt">[</span>i<span class="hl opt">] !=</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">]) {</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Incorrect value, wbuf[%u]=%d, rbuf[%u]=%d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">,</span> <span class="hl opt">(</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>i<span class="hl opt">,</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">], (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>i<span class="hl opt">,</span> rbuf<span class="hl opt">[</span>i<span class="hl opt">]);</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Closing */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>mem_id<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open the second dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_FIXED_NOMAX<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get dataset dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Dget_space</span><span class="hl opt">(</span>dsid<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataspace for read buffer */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>mem_id <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> msize<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Select the random points for reading */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_elements</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> POINTS<span class="hl opt">, (</span><span class="hl kwb">const</span> hsize_t <span class="hl opt">*)</span>coord_bytes<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read from dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> mem_id<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> rbuf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify that written and read data are the same */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> POINTS<span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>rbuf<span class="hl opt">[</span>i<span class="hl opt">] !=</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">]) {</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Incorrect value, wbuf[%u]=%d, rbuf[%u]=%d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">,</span> <span class="hl opt">(</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>i<span class="hl opt">,</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">], (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>i<span class="hl opt">,</span> rbuf<span class="hl opt">[</span>i<span class="hl opt">]);</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Closing */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>mem_id<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open the third dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid_big <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_FIXED_BIG<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get dataset dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid_big <span class="hl opt">=</span> <span class="hl kwd">H5Dget_space</span><span class="hl opt">(</span>dsid_big<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataspace for read buffer */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>big_mem_id <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> msize_big<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Select the random points for reading */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_elements</span><span class="hl opt">(</span>sid_big<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> POINTS_BIG<span class="hl opt">, (</span><span class="hl kwb">const</span> hsize_t <span class="hl opt">*)</span>coord_big_bytes<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read from dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid_big<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> big_mem_id<span class="hl opt">,</span> sid_big<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> rbuf_big<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify that written and read data are the same */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> POINTS_BIG<span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>rbuf_big<span class="hl opt">[</span>i<span class="hl opt">] !=</span> wbuf_big<span class="hl opt">[</span>i<span class="hl opt">]) {</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Incorrect value, wbuf_bif[%u]=%d, rbuf_big[%u]=%d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">,</span> <span class="hl opt">(</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>i<span class="hl opt">,</span> wbuf_big<span class="hl opt">[</span>i<span class="hl opt">], (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>i<span class="hl opt">,</span> rbuf_big<span class="hl opt">[</span>i<span class="hl opt">]);</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Closing */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid_big<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid_big<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>big_mem_id<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Delete datasets */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Ldelete</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_FIXED_BIG<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Ldelete</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_FIXED_NOMAX<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Ldelete</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_FIXED_MAX<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close everything */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the size of the file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>file_size <span class="hl opt">=</span> <span class="hl kwd">h5_get_file_size</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify the file is correct size */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>file_size <span class="hl opt">!=</span> empty_size<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_DEFLATE</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_DEFLATE */</span><span class="hl ppc"></span> <span class="hl com">/* Release buffers */</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>wbuf_big<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rbuf_big<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>chunks<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>chunks_big<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>coord<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>coord_big<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>chunks_bytes<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>chunks_big_bytes<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>coord_bytes<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>coord_big_bytes<span class="hl opt">);</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>mem_id<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>wbuf_big<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rbuf_big<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>chunks<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>chunks_big<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>coord<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>coord_big<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>chunks_bytes<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>chunks_big_bytes<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>coord_bytes<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>coord_big_bytes<span class="hl opt">);</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_fixed_array() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_single_chunk</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests support for Single Chunk indexing type</span> <span class="hl com"> *</span> <span class="hl com"> * Create the following 2 datasets:</span> <span class="hl com"> * 1) chunked dataset with NULL max dims and cur_dims = chunk_dims</span> <span class="hl com"> * 2) chunked dataset with cur_dims = max_dims = chunk_dims</span> <span class="hl com"> *</span> <span class="hl com"> * Repeat the following test with/without compression filter</span> <span class="hl com"> * Repeat the following test with H5D_ALLOC_TIME_EARLY/H5D_ALLOC_TIME_LATE/H5D_ALLOC_TIME_INCR</span> <span class="hl com"> * For the old format,</span> <span class="hl com"> * verify that v1 btree indexing type is used for</span> <span class="hl com"> * all datasets with all settings</span> <span class="hl com"> * For the new format:</span> <span class="hl com"> * Verify that Single Chunk indexing type is used for</span> <span class="hl com"> * all datasets with all settings</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Vailin Choi; July 2011</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_single_chunk</span><span class="hl opt">(</span>hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> <span class="hl com">/* File name */</span> hid_t fid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* File ID */</span> hid_t dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset creation property list ID */</span> hid_t t_dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset creation property list ID */</span> hid_t sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> sid_max <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataspace ID for dataset with fixed dimensions */</span> hid_t did <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> did_max <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset ID for dataset with fixed dimensions */</span> hsize_t dim2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span>DSET_DIM1<span class="hl opt">,</span> DSET_DIM2<span class="hl opt">};</span> <span class="hl com">/* Dataset dimensions */</span> hsize_t t_dim2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span>DSET_TMP_DIM1<span class="hl opt">,</span> DSET_TMP_DIM2<span class="hl opt">};</span> <span class="hl com">/* Dataset dimensions */</span> <span class="hl kwb">int</span> <span class="hl opt">*</span> wbuf <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl com">/* write buffer */</span> <span class="hl kwb">int</span> <span class="hl opt">*</span> t_wbuf <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl com">/* write buffer */</span> <span class="hl kwb">int</span> <span class="hl opt">*</span> rbuf <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl com">/* read buffer */</span> <span class="hl kwb">int</span> <span class="hl opt">*</span> t_rbuf <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl com">/* read buffer */</span> H5D_chunk_index_t idx_type<span class="hl opt">;</span> <span class="hl com">/* Dataset chunk index type */</span> H5F_libver_t low<span class="hl opt">,</span> high<span class="hl opt">;</span> <span class="hl com">/* File format bounds */</span> H5D_alloc_time_t alloc_time<span class="hl opt">;</span> <span class="hl com">/* Storage allocation time */</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_DEFLATE</span> <span class="hl kwb">unsigned</span> compress<span class="hl opt">;</span> <span class="hl com">/* Whether chunks should be compressed */</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_DEFLATE */</span><span class="hl ppc"></span> <span class="hl kwb">size_t</span> n<span class="hl opt">,</span> i<span class="hl opt">;</span> <span class="hl com">/* local index variables */</span> herr_t ret<span class="hl opt">;</span> <span class="hl com">/* Generic return value */</span> h5_stat_size_t empty_size<span class="hl opt">;</span> <span class="hl com">/* Size of an empty file */</span> h5_stat_size_t file_size<span class="hl opt">;</span> <span class="hl com">/* Size of each file created */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"datasets w/Single Chunk indexing"</span><span class="hl opt">);</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">17</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> filename<span class="hl opt">);</span> <span class="hl com">/* Check if we are using the latest version of the format */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_libver_bounds</span><span class="hl opt">(</span>fapl<span class="hl opt">, &</span>low<span class="hl opt">, &</span>high<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create and close the file to get the file size */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the size of the empty file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>empty_size <span class="hl opt">=</span> <span class="hl kwd">h5_get_file_size</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Allocate the buffers */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>wbuf <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">*)</span><span class="hl kwd">HDmalloc</span><span class="hl opt">(</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) * (</span>DSET_DIM1 <span class="hl opt">*</span> DSET_DIM2<span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>rbuf <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">*)</span><span class="hl kwd">HDmalloc</span><span class="hl opt">(</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) * (</span>DSET_DIM1 <span class="hl opt">*</span> DSET_DIM2<span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>t_wbuf <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">*)</span><span class="hl kwd">HDmalloc</span><span class="hl opt">(</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) * (</span>DSET_TMP_DIM1 <span class="hl opt">*</span> DSET_TMP_DIM2<span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>t_rbuf <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">*)</span><span class="hl kwd">HDmalloc</span><span class="hl opt">(</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) * (</span>DSET_TMP_DIM1 <span class="hl opt">*</span> DSET_TMP_DIM2<span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> n <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span>DSET_DIM1 <span class="hl opt">*</span> DSET_DIM2<span class="hl opt">);</span> i<span class="hl opt">++)</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">] = (</span><span class="hl kwb">int</span><span class="hl opt">)</span>n<span class="hl opt">++;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> n <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span>DSET_TMP_DIM1 <span class="hl opt">*</span> DSET_TMP_DIM2<span class="hl opt">);</span> i<span class="hl opt">++)</span> t_wbuf<span class="hl opt">[</span>i<span class="hl opt">] = (</span><span class="hl kwb">int</span><span class="hl opt">)</span>n<span class="hl opt">++;</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_DEFLATE</span> <span class="hl com">/* Loop over compressing chunks */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>compress <span class="hl opt">=</span> FALSE<span class="hl opt">;</span> compress <span class="hl opt"><=</span> TRUE<span class="hl opt">;</span> compress<span class="hl opt">++) {</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_DEFLATE */</span><span class="hl ppc"></span> <span class="hl com">/* Loop over storage allocation time */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>alloc_time <span class="hl opt">=</span> H5D_ALLOC_TIME_EARLY<span class="hl opt">;</span> alloc_time <span class="hl opt"><=</span> H5D_ALLOC_TIME_INCR<span class="hl opt">;</span> alloc_time<span class="hl opt">++) {</span> <span class="hl com">/* Create file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>t_dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set chunking */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>ret <span class="hl opt">=</span> <span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> dim2<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">" Problem with setting chunk."</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>ret <span class="hl opt">=</span> <span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>t_dcpl<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> t_dim2<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">" Problem with setting chunk."</span><span class="hl opt">);</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_DEFLATE</span> <span class="hl com">/* Check if we should compress the chunks */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>compress<span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_deflate</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">9</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_deflate</span><span class="hl opt">(</span>t_dcpl<span class="hl opt">,</span> <span class="hl num">9</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_DEFLATE */</span><span class="hl ppc"></span> <span class="hl com">/* Set fill time */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fill_time</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> H5D_FILL_TIME_ALLOC<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_fill_time</span><span class="hl opt">(</span>t_dcpl<span class="hl opt">,</span> H5D_FILL_TIME_ALLOC<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set allocation time */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_alloc_time</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> alloc_time<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_alloc_time</span><span class="hl opt">(</span>t_dcpl<span class="hl opt">,</span> alloc_time<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create first dataset with cur and max dimensions */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid_max <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dim2<span class="hl opt">,</span> dim2<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> did_max <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_SINGLE_MAX<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid_max<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>did_max <span class="hl opt"><</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">" Creating Chunked Dataset with maximum dimensions."</span><span class="hl opt">);</span> <span class="hl com">/* Get the chunk index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>did_max<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Chunk index type depends on whether we are using the latest version of the format */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>low <span class="hl opt">==</span> H5F_LIBVER_LATEST<span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_SINGLE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using Single Chunk indexing"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_BTREE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v1 B-tree as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> <span class="hl com">/* Write into dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>did_max<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> wbuf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Closing */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did_max<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid_max<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create second dataset with curr dim but NULL max dim */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> t_dim2<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> did <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_SINGLE_NOMAX<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> t_dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>did <span class="hl opt"><</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">" Creating Chunked Dataset."</span><span class="hl opt">);</span> <span class="hl com">/* Get the chunk index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>did<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Chunk index type depends on whether we are using the latest version of the format */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>low <span class="hl opt">==</span> H5F_LIBVER_LATEST<span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_SINGLE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using Single Chunk indexing"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_BTREE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v1 B-tree as index"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> <span class="hl com">/* Write into dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>did<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> t_wbuf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Closing */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open the first dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>did_max <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_SINGLE_MAX<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read from dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>did_max<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> rbuf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify that written and read data are the same */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span>DSET_DIM1 <span class="hl opt">*</span> DSET_DIM2<span class="hl opt">);</span> i<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>rbuf<span class="hl opt">[</span>i<span class="hl opt">] !=</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">]) {</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Incorrect value, wbuf[%u]=%d, rbuf[%u]=%d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">,</span> <span class="hl opt">(</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>i<span class="hl opt">,</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">], (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>i<span class="hl opt">,</span> rbuf<span class="hl opt">[</span>i<span class="hl opt">]);</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Closing */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did_max<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open the second dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>did <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_SINGLE_NOMAX<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwd">HDmemset</span><span class="hl opt">(</span>rbuf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) * (</span>DSET_DIM1 <span class="hl opt">*</span> DSET_DIM2<span class="hl opt">));</span> <span class="hl com">/* Read from dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>did<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> t_rbuf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify that written and read data are the same */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span>DSET_TMP_DIM1 <span class="hl opt">*</span> DSET_TMP_DIM2<span class="hl opt">);</span> i<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>t_rbuf<span class="hl opt">[</span>i<span class="hl opt">] !=</span> t_wbuf<span class="hl opt">[</span>i<span class="hl opt">]) {</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">" Line %d: Incorrect value, t_wbuf[%u]=%d, t_rbuf[%u]=%d</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> __LINE__<span class="hl opt">,</span> <span class="hl opt">(</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>i<span class="hl opt">,</span> t_wbuf<span class="hl opt">[</span>i<span class="hl opt">], (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>i<span class="hl opt">,</span> t_rbuf<span class="hl opt">[</span>i<span class="hl opt">]);</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Closing */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Delete datasets */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Ldelete</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_SINGLE_NOMAX<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Ldelete</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_SINGLE_MAX<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close everything */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the size of the file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>file_size <span class="hl opt">=</span> <span class="hl kwd">h5_get_file_size</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify the file is correct size */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>file_size <span class="hl opt">!=</span> empty_size<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_DEFLATE</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_DEFLATE */</span><span class="hl ppc"></span> <span class="hl com">/* Release buffers */</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>wbuf<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rbuf<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>t_wbuf<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>t_rbuf<span class="hl opt">);</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>t_dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did_max<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid_max<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>wbuf<span class="hl opt">)</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>wbuf<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>rbuf<span class="hl opt">)</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>rbuf<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>t_wbuf<span class="hl opt">)</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>t_wbuf<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>t_rbuf<span class="hl opt">)</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>t_rbuf<span class="hl opt">);</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_single_chunk() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> *</span> <span class="hl com"> * test_idx_compatible():</span> <span class="hl com"> * Verify that the library can read datasets created with</span> <span class="hl com"> * 1.6/1.8 library that use the B-tree indexing method.</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Vailin Choi; 26th August, 2009</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_idx_compatible</span><span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span> <span class="hl opt">{</span> hid_t fid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* File id */</span> hid_t did <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset id */</span> <span class="hl kwb">const char</span> <span class="hl opt">*</span> filename <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl com">/* old test file name */</span> <span class="hl kwb">unsigned</span> j<span class="hl opt">;</span> <span class="hl com">/* Local index variable */</span> H5D_chunk_index_t idx_type<span class="hl opt">;</span> <span class="hl com">/* Chunked dataset index type */</span> <span class="hl com">/* Output message about test being performed */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"compatibility for 1.6/1.8 datasets that use B-tree indexing"</span><span class="hl opt">);</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> <span class="hl kwd">NELMTS</span><span class="hl opt">(</span>OLD_FILENAME<span class="hl opt">);</span> j<span class="hl opt">++) {</span> <span class="hl com">/* Generate correct name for test file by prepending the source path */</span> filename <span class="hl opt">=</span> <span class="hl kwd">H5_get_srcdir_filename</span><span class="hl opt">(</span>OLD_FILENAME<span class="hl opt">[</span>j<span class="hl opt">]);</span> <span class="hl com">/* Open the file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fopen</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_RDONLY<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Should be able to read the dataset w/o filter created under 1.8/1.6 */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>did <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the chunk index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>did<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_BTREE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v1 B-tree as index"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Should be able to read the dataset w/ filter created under 1.8/1.6 */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>did <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_FILTER<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the chunk index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>did<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_BTREE<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using v1 B-tree as index"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close the file */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_idx_compatible() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> *</span> <span class="hl com"> * test_unfiltered_edge_chunks():</span> <span class="hl com"> * Tests that partial edge chunks aren't filtered when the</span> <span class="hl com"> * H5D_CHUNK_FILTER_PARTIAL_CHUNKS option is set.</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Neil Fortner; 17th March, 2010</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_unfiltered_edge_chunks</span><span class="hl opt">(</span>hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t fid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* File id */</span> hid_t did <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset id */</span> hid_t sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataspace id */</span> hid_t dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* DCPL id */</span> hsize_t dim<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">4</span><span class="hl opt">,</span> <span class="hl num">3</span><span class="hl opt">};</span> <span class="hl com">/* Dataset dimensions */</span> hsize_t cdim<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">};</span> <span class="hl com">/* Chunk dimension */</span> <span class="hl kwb">char</span> wbuf<span class="hl opt">[</span><span class="hl num">4</span><span class="hl opt">][</span><span class="hl num">3</span><span class="hl opt">];</span> <span class="hl com">/* Write buffer */</span> <span class="hl kwb">char</span> rbuf<span class="hl opt">[</span><span class="hl num">4</span><span class="hl opt">][</span><span class="hl num">3</span><span class="hl opt">];</span> <span class="hl com">/* Read buffer */</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">] =</span> <span class="hl str">""</span><span class="hl opt">;</span> <span class="hl com">/* old test file name */</span> <span class="hl kwb">unsigned</span> opts<span class="hl opt">;</span> <span class="hl com">/* Chunk options */</span> <span class="hl kwb">unsigned</span> i<span class="hl opt">,</span> j<span class="hl opt">;</span> <span class="hl com">/* Local index variables */</span> <span class="hl com">/* Output message about test being performed */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"disabled partial chunk filters"</span><span class="hl opt">);</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">14</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> filename<span class="hl opt">);</span> <span class="hl com">/* Create the file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Register byte-counting filter */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Zregister</span><span class="hl opt">(</span>H5Z_COUNT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dim<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create DCPL */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set chunk dimensions */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> cdim<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Add "count" filter */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_filter</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> H5Z_FILTER_COUNT<span class="hl opt">,</span> <span class="hl num">0U</span><span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">0</span><span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Disable filters on partial chunks */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_chunk_opts</span><span class="hl opt">(</span>dcpl<span class="hl opt">, &</span>opts<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> opts <span class="hl opt">|=</span> H5D_CHUNK_DONT_FILTER_PARTIAL_CHUNKS<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk_opts</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> opts<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize write buffer */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> dim<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> dim<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++)</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] = (</span><span class="hl kwb">char</span><span class="hl opt">)((</span><span class="hl num">2</span> <span class="hl opt">*</span> i<span class="hl opt">) -</span> j<span class="hl opt">);</span> <span class="hl com">/* Reset byte counts */</span> count_nbytes_read <span class="hl opt">= (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">0</span><span class="hl opt">;</span> count_nbytes_written <span class="hl opt">= (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">0</span><span class="hl opt">;</span> <span class="hl com">/* Create dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>did <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_CHUNKED_NAME<span class="hl opt">,</span> H5T_NATIVE_CHAR<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Nothing should have been written, as we are not using early allocation */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>count_nbytes_read <span class="hl opt">!= (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>count_nbytes_written <span class="hl opt">!= (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Write data */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>did<span class="hl opt">,</span> H5T_NATIVE_CHAR<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> wbuf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Make sure only 2 of the 4 chunks were written through the filter (4 bytes</span> <span class="hl com"> * each) */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>count_nbytes_read <span class="hl opt">!= (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>count_nbytes_written <span class="hl opt">!= (</span><span class="hl kwb">size_t</span><span class="hl opt">)(</span><span class="hl num">2</span> <span class="hl opt">*</span> cdim<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] *</span> cdim<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Reopen the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>did <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_CHUNKED_NAME<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>did<span class="hl opt">,</span> H5T_NATIVE_CHAR<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> rbuf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify that data read == data written */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> dim<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">];</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt"><</span> dim<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> j<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>rbuf<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">] !=</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">])</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Make sure only 2 of the 4 chunks were read through the filter (4 bytes</span> <span class="hl com"> * each) */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>count_nbytes_read <span class="hl opt">!= (</span><span class="hl kwb">size_t</span><span class="hl opt">)(</span><span class="hl num">2</span> <span class="hl opt">*</span> cdim<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] *</span> cdim<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>count_nbytes_written <span class="hl opt">!= (</span><span class="hl kwb">size_t</span><span class="hl opt">)(</span><span class="hl num">2</span> <span class="hl opt">*</span> cdim<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] *</span> cdim<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close IDs */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_unfiltered_edge_chunks() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_large_chunk_shrink</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests support for shrinking a chunk larger than 1 MB by a</span> <span class="hl com"> * size greater than 1 MB.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Neil Fortner</span> <span class="hl com"> * Monday, November 31, 2011</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_large_chunk_shrink</span><span class="hl opt">(</span>hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> hid_t fid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* File ID */</span> hid_t dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset creation property list ID */</span> hid_t sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataspace ID */</span> hid_t scalar_sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Scalar dataspace ID */</span> hid_t dsid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset ID */</span> hsize_t dim<span class="hl opt">,</span> max_dim<span class="hl opt">,</span> chunk_dim<span class="hl opt">;</span> <span class="hl com">/* Dataset and chunk dimensions */</span> hsize_t hs_offset<span class="hl opt">;</span> <span class="hl com">/* Hyperslab offset */</span> hsize_t hs_size<span class="hl opt">;</span> <span class="hl com">/* Hyperslab size */</span> <span class="hl kwb">unsigned</span> write_elem<span class="hl opt">,</span> read_elem<span class="hl opt">;</span> <span class="hl com">/* Element written/read */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"shrinking large chunk"</span><span class="hl opt">);</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">10</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> filename<span class="hl opt">);</span> <span class="hl com">/* Create file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set 2 MB chunk size */</span> chunk_dim <span class="hl opt">=</span> <span class="hl num">2</span> <span class="hl opt">*</span> <span class="hl num">1024</span> <span class="hl opt">*</span> <span class="hl num">1024</span> <span class="hl opt">/</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">unsigned</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">, &</span>chunk_dim<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create scalar dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>scalar_sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate</span><span class="hl opt">(</span>H5S_SCALAR<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create 1-D dataspace */</span> dim <span class="hl opt">=</span> <span class="hl num">2</span> <span class="hl opt">*</span> <span class="hl num">1024</span> <span class="hl opt">*</span> <span class="hl num">1024</span> <span class="hl opt">/</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">unsigned</span><span class="hl opt">);</span> max_dim <span class="hl opt">=</span> H5S_UNLIMITED<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">, &</span>dim<span class="hl opt">, &</span>max_dim<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create 2 MB chunked dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset"</span><span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Select last element in the dataset */</span> hs_offset <span class="hl opt">=</span> dim <span class="hl opt">-</span> <span class="hl num">1</span><span class="hl opt">;</span> hs_size <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">, &</span>hs_offset<span class="hl opt">,</span> NULL<span class="hl opt">, &</span>hs_size<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read (unwritten) element from dataset */</span> read_elem <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>read_elem<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify unwritten element is fill value (0) */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>read_elem <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"invalid unwritten element read"</span><span class="hl opt">);</span> <span class="hl com">/* Write element to dataset */</span> write_elem <span class="hl opt">=</span> <span class="hl num">2</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>write_elem<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read element from dataset */</span> read_elem <span class="hl opt">=</span> write_elem <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>read_elem<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify written element is read in */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>read_elem <span class="hl opt">!=</span> write_elem<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"invalid written element read"</span><span class="hl opt">);</span> <span class="hl com">/* Shrink dataset to 512 KB */</span> dim <span class="hl opt">=</span> <span class="hl num">512</span> <span class="hl opt">*</span> <span class="hl num">1024</span> <span class="hl opt">/</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">unsigned</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dset_extent</span><span class="hl opt">(</span>dsid<span class="hl opt">, &</span>dim<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Expand dataset back to 2MB */</span> dim <span class="hl opt">=</span> <span class="hl num">2</span> <span class="hl opt">*</span> <span class="hl num">1024</span> <span class="hl opt">*</span> <span class="hl num">1024</span> <span class="hl opt">/</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">unsigned</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dset_extent</span><span class="hl opt">(</span>dsid<span class="hl opt">, &</span>dim<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read element from dataset */</span> read_elem <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_UINT<span class="hl opt">,</span> scalar_sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>read_elem<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify element is now 0 */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>read_elem <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"invalid element read"</span><span class="hl opt">);</span> <span class="hl com">/* Close everything */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>scalar_sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>scalar_sid<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_large_chunk_shrink() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_zero_dim_dset</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests support for reading a 1D chunked dataset with</span> <span class="hl com"> * dimension size = 0.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Mohamad Chaarawi</span> <span class="hl com"> * Wednesdat, July 9, 2014</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_zero_dim_dset</span><span class="hl opt">(</span>hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> hid_t fid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* File ID */</span> hid_t dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset creation property list ID */</span> hid_t sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataspace ID */</span> hid_t dsid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset ID */</span> hsize_t dim<span class="hl opt">,</span> chunk_dim<span class="hl opt">;</span> <span class="hl com">/* Dataset and chunk dimensions */</span> <span class="hl kwb">int</span> data<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> H5F_libver_t low<span class="hl opt">,</span> high<span class="hl opt">;</span> <span class="hl com">/* File format bounds */</span> herr_t ret<span class="hl opt">;</span> <span class="hl com">/* Generic return value */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"chunked dataset with zero dimension"</span><span class="hl opt">);</span> <span class="hl com">/* Loop through all the combinations of low/high library format bounds,</span> <span class="hl com"> skipping invalid combination, and verify support for reading a 1D</span> <span class="hl com"> chunked dataset with dimension size = 0 */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>low <span class="hl opt">=</span> H5F_LIBVER_EARLIEST<span class="hl opt">;</span> low <span class="hl opt"><</span> H5F_LIBVER_NBOUNDS<span class="hl opt">;</span> low<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>high <span class="hl opt">=</span> H5F_LIBVER_EARLIEST<span class="hl opt">;</span> high <span class="hl opt"><</span> H5F_LIBVER_NBOUNDS<span class="hl opt">;</span> high<span class="hl opt">++) {</span> <span class="hl com">/* Set version bounds before opening the file */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Pset_libver_bounds</span><span class="hl opt">(</span>fapl<span class="hl opt">,</span> low<span class="hl opt">,</span> high<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt"><</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl com">/* Invalid low/high combinations */</span> <span class="hl kwa">continue</span><span class="hl opt">;</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">16</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> filename<span class="hl opt">);</span> <span class="hl com">/* Create file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set 1 chunk size */</span> chunk_dim <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">, &</span>chunk_dim<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create 1D dataspace with 0 dim size */</span> dim <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">, &</span>dim<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create chunked dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset"</span><span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* write 0 elements from dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read 0 elements from dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close everything */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end for high */</span> <span class="hl opt">}</span> <span class="hl com">/* end for low */</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_zero_dim_dset() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_swmr_non_latest</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Checks that a file created with either:</span> <span class="hl com"> * (a) SWMR-write + non-latest-format</span> <span class="hl com"> * (b) write + latest format</span> <span class="hl com"> * will generate dataset with latest chunk indexing type.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_swmr_non_latest</span><span class="hl opt">(</span><span class="hl kwb">const char</span> <span class="hl opt">*</span>env_h5_driver<span class="hl opt">,</span> hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> hid_t fid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* File ID */</span> hid_t gid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Group ID */</span> hid_t dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset creation property list ID */</span> hid_t sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataspace ID */</span> hid_t did <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset ID */</span> hsize_t dim<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">],</span> dims2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Size of dataset */</span> hsize_t max_dim<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">],</span> max_dims2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Maximum size of dataset */</span> hsize_t chunk_dim<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">],</span> chunk_dims2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Chunk dimensions */</span> H5D_chunk_index_t idx_type<span class="hl opt">;</span> <span class="hl com">/* Chunk index type */</span> <span class="hl kwb">int</span> data<span class="hl opt">;</span> <span class="hl com">/* Data to be written to the dataset */</span> H5F_libver_t low<span class="hl opt">;</span> <span class="hl com">/* File format low bound */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"File created with write+latest-format/SWMR-write+non-latest-format: dataset with latest chunk "</span> <span class="hl str">"index"</span><span class="hl opt">);</span> <span class="hl com">/* Skip this test if SWMR I/O is not supported for the VFD specified</span> <span class="hl com"> * by the environment variable.</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(!</span><span class="hl kwd">H5FD__supports_swmr_test</span><span class="hl opt">(</span>env_h5_driver<span class="hl opt">)) {</span> <span class="hl kwd">SKIPPED</span><span class="hl opt">();</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" Test skipped due to VFD not supporting SWMR I/O."</span><span class="hl opt">);</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* Check if we are using the latest version of the format */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_libver_bounds</span><span class="hl opt">(</span>fapl<span class="hl opt">, &</span>low<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">18</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> filename<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>low <span class="hl opt">==</span> H5F_LIBVER_LATEST<span class="hl opt">) {</span> <span class="hl com">/* Create file with write+latest-format */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl com">/* Create file with SWMR-write+non-latest-format */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC <span class="hl opt">|</span> H5F_ACC_SWMR_WRITE<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> <span class="hl com">/* Create a chunked dataset: this will use extensible array chunk indexing */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> chunk_dim<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">6</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> chunk_dim<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> dim<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> max_dim<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> H5S_UNLIMITED<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> dim<span class="hl opt">,</span> max_dim<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>did <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_CHUNKED_NAME<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Write to the dataset */</span> data <span class="hl opt">=</span> <span class="hl num">100</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>did<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify the dataset's indexing type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>did<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_EARRAY<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"created dataset not indexed by extensible array"</span><span class="hl opt">);</span> <span class="hl com">/* Closing */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open the file again */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fopen</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_RDWR<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open the dataset in the file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>did <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_CHUNKED_NAME<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify the dataset's indexing type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>did<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_EARRAY<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"created dataset not indexed by extensible array"</span><span class="hl opt">);</span> <span class="hl com">/* Read from the dataset and verify data read is correct */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>did<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>data <span class="hl opt">!=</span> <span class="hl num">100</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create a group in the file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>gid <span class="hl opt">=</span> <span class="hl kwd">H5Gcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"group"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create a chunked dataset in the group: this will use v2 B-tree chunk indexing */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> chunk_dims2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> chunk_dims2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">10</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_dims2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> dims2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> dims2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> max_dims2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> max_dims2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> H5S_UNLIMITED<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dims2<span class="hl opt">,</span> max_dims2<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>did <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>gid<span class="hl opt">,</span> DSET_CHUNKED_NAME<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify the dataset's indexing type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>did<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_BT2<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"created dataset not indexed by v2 B-tree"</span><span class="hl opt">);</span> <span class="hl com">/* Closing */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Gclose</span><span class="hl opt">(</span>gid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open the file again */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fopen</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_RDONLY<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open the group */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>gid <span class="hl opt">=</span> <span class="hl kwd">H5Gopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"group"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open the dataset in the group */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>did <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>gid<span class="hl opt">,</span> DSET_CHUNKED_NAME<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify the dataset's indexing type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>did<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_BT2<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"created dataset not indexed by v2 B-tree"</span><span class="hl opt">);</span> <span class="hl com">/* Closing */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Gclose</span><span class="hl opt">(</span>gid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Reopen the file with SWMR-write */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fopen</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_RDWR <span class="hl opt">|</span> H5F_ACC_SWMR_WRITE<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open the dataset in the file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>did <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_CHUNKED_NAME<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify the dataset's indexing type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>did<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_EARRAY<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"created dataset not indexed by extensible array"</span><span class="hl opt">);</span> <span class="hl com">/* Close the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open the group */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>gid <span class="hl opt">=</span> <span class="hl kwd">H5Gopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"group"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open the dataset in the group */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>did <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>gid<span class="hl opt">,</span> DSET_CHUNKED_NAME<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify the dataset's indexing type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>did<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_BT2<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"created dataset not indexed by v2 B-tree"</span><span class="hl opt">);</span> <span class="hl com">/* Write to the dataset in the group */</span> data <span class="hl opt">=</span> <span class="hl num">99</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>did<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Closing */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Gclose</span><span class="hl opt">(</span>gid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open the file again with SWMR read access */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fopen</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_RDONLY <span class="hl opt">|</span> H5F_ACC_SWMR_READ<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>gid <span class="hl opt">=</span> <span class="hl kwd">H5Gopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"group"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>did <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>gid<span class="hl opt">,</span> DSET_CHUNKED_NAME<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read from the dataset and verify data read is correct */</span> data <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>did<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>data<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>data <span class="hl opt">!=</span> <span class="hl num">99</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Closing */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Gclose</span><span class="hl opt">(</span>gid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl kwd">H5Gclose</span><span class="hl opt">(</span>gid<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* test_swmr_non_latest() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_earray_hdr_fd</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests that extensible array header flush dependencies</span> <span class="hl com"> * are created and torn down correctly when used as a</span> <span class="hl com"> * chunk index.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_earray_hdr_fd</span><span class="hl opt">(</span><span class="hl kwb">const char</span> <span class="hl opt">*</span>env_h5_driver<span class="hl opt">,</span> hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> hid_t fid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hid_t sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hid_t did <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hid_t tid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hid_t dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hid_t msid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> H5D_chunk_index_t idx_type<span class="hl opt">;</span> <span class="hl kwb">const</span> hsize_t shape<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span><span class="hl num">8</span><span class="hl opt">};</span> <span class="hl kwb">const</span> hsize_t maxshape<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span>H5S_UNLIMITED<span class="hl opt">};</span> <span class="hl kwb">const</span> hsize_t chunk<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span><span class="hl num">8</span><span class="hl opt">};</span> <span class="hl kwb">const int</span> buffer<span class="hl opt">[</span><span class="hl num">8</span><span class="hl opt">] = {</span><span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">3</span><span class="hl opt">,</span> <span class="hl num">4</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">,</span> <span class="hl num">6</span><span class="hl opt">,</span> <span class="hl num">7</span><span class="hl opt">};</span> H5O_info2_t info<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"Extensible array chunk index header flush dependencies handled correctly"</span><span class="hl opt">);</span> <span class="hl com">/* Skip this test if SWMR I/O is not supported for the VFD specified</span> <span class="hl com"> * by the environment variable.</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(!</span><span class="hl kwd">H5FD__supports_swmr_test</span><span class="hl opt">(</span>env_h5_driver<span class="hl opt">)) {</span> <span class="hl kwd">SKIPPED</span><span class="hl opt">();</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" Test skipped due to VFD not supporting SWMR I/O."</span><span class="hl opt">);</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fapl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_FILE_ACCESS<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_libver_bounds</span><span class="hl opt">(</span>fapl<span class="hl opt">,</span> H5F_LIBVER_LATEST<span class="hl opt">,</span> H5F_LIBVER_LATEST<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">19</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>filename<span class="hl opt">));</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create a dataset with one unlimited dimension */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> shape<span class="hl opt">,</span> maxshape<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>tid <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_NATIVE_INT32<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> chunk<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>did <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_EARRAY_HDR_FD<span class="hl opt">,</span> tid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify the chunk index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>did<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_EARRAY<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using extensible array as index"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fstart_swmr_write</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Write data to the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>did <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_EARRAY_HDR_FD<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>tid <span class="hl opt">=</span> <span class="hl kwd">H5Dget_type</span><span class="hl opt">(</span>did<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>did<span class="hl opt">,</span> tid<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> buffer<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* The second call triggered a bug in the library (JIRA issue: SWMR-95) */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Oget_info_by_name3</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_EARRAY_HDR_FD<span class="hl opt">, &</span>info<span class="hl opt">,</span> H5O_INFO_BASIC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Oget_info_by_name3</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_EARRAY_HDR_FD<span class="hl opt">, &</span>info<span class="hl opt">,</span> H5O_INFO_BASIC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>fapl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>fapl<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>tid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>msid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* test_earray_hdr_fd() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_farray_hdr_fd</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests that fixed array header flush dependencies</span> <span class="hl com"> * are created and torn down correctly when used as a</span> <span class="hl com"> * chunk index.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_farray_hdr_fd</span><span class="hl opt">(</span><span class="hl kwb">const char</span> <span class="hl opt">*</span>env_h5_driver<span class="hl opt">,</span> hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> hid_t fid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hid_t sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hid_t did <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hid_t tid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hid_t dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hid_t msid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> H5D_chunk_index_t idx_type<span class="hl opt">;</span> <span class="hl kwb">const</span> hsize_t shape<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span><span class="hl num">8</span><span class="hl opt">};</span> <span class="hl kwb">const</span> hsize_t maxshape<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span><span class="hl num">64</span><span class="hl opt">};</span> <span class="hl kwb">const</span> hsize_t chunk<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span><span class="hl num">8</span><span class="hl opt">};</span> <span class="hl kwb">const int</span> buffer<span class="hl opt">[</span><span class="hl num">8</span><span class="hl opt">] = {</span><span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">3</span><span class="hl opt">,</span> <span class="hl num">4</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">,</span> <span class="hl num">6</span><span class="hl opt">,</span> <span class="hl num">7</span><span class="hl opt">};</span> H5O_info2_t info<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"Fixed array chunk index header flush dependencies handled correctly"</span><span class="hl opt">);</span> <span class="hl com">/* Skip this test if SWMR I/O is not supported for the VFD specified</span> <span class="hl com"> * by the environment variable.</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(!</span><span class="hl kwd">H5FD__supports_swmr_test</span><span class="hl opt">(</span>env_h5_driver<span class="hl opt">)) {</span> <span class="hl kwd">SKIPPED</span><span class="hl opt">();</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" Test skipped due to VFD not supporting SWMR I/O."</span><span class="hl opt">);</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fapl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_FILE_ACCESS<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_libver_bounds</span><span class="hl opt">(</span>fapl<span class="hl opt">,</span> H5F_LIBVER_LATEST<span class="hl opt">,</span> H5F_LIBVER_LATEST<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">20</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>filename<span class="hl opt">));</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create a chunked dataset with fixed dimensions */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> shape<span class="hl opt">,</span> maxshape<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>tid <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_NATIVE_INT32<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> chunk<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>did <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_FARRAY_HDR_FD<span class="hl opt">,</span> tid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify the chunk index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>did<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_FARRAY<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using fixed array as index"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fstart_swmr_write</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Write data to the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>did <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_FARRAY_HDR_FD<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>tid <span class="hl opt">=</span> <span class="hl kwd">H5Dget_type</span><span class="hl opt">(</span>did<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>did<span class="hl opt">,</span> tid<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> buffer<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* The second call triggered a bug in the library (JIRA issue: SWMR-95) */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Oget_info_by_name3</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_FARRAY_HDR_FD<span class="hl opt">, &</span>info<span class="hl opt">,</span> H5O_INFO_BASIC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Oget_info_by_name3</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_FARRAY_HDR_FD<span class="hl opt">, &</span>info<span class="hl opt">,</span> H5O_INFO_BASIC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>fapl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>fapl<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>tid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>msid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_farray_hdr_fd() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_bt2_hdr_fd</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests that version 2 B-tree header flush dependencies</span> <span class="hl com"> * are created and torn down correctly when used as a</span> <span class="hl com"> * chunk index.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_bt2_hdr_fd</span><span class="hl opt">(</span><span class="hl kwb">const char</span> <span class="hl opt">*</span>env_h5_driver<span class="hl opt">,</span> hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> hid_t fid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hid_t sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hid_t did <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hid_t tid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hid_t dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hid_t msid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> H5D_chunk_index_t idx_type<span class="hl opt">;</span> <span class="hl kwb">const</span> hsize_t shape<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">8</span><span class="hl opt">,</span> <span class="hl num">8</span><span class="hl opt">};</span> <span class="hl kwb">const</span> hsize_t maxshape<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span>H5S_UNLIMITED<span class="hl opt">,</span> H5S_UNLIMITED<span class="hl opt">};</span> <span class="hl kwb">const</span> hsize_t chunk<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] = {</span><span class="hl num">8</span><span class="hl opt">,</span> <span class="hl num">8</span><span class="hl opt">};</span> <span class="hl kwb">const int</span> buffer<span class="hl opt">[</span><span class="hl num">8</span><span class="hl opt">][</span><span class="hl num">8</span><span class="hl opt">] = {{</span><span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">3</span><span class="hl opt">,</span> <span class="hl num">4</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">,</span> <span class="hl num">6</span><span class="hl opt">,</span> <span class="hl num">7</span><span class="hl opt">}, {</span><span class="hl num">8</span><span class="hl opt">,</span> <span class="hl num">9</span><span class="hl opt">,</span> <span class="hl num">10</span><span class="hl opt">,</span> <span class="hl num">11</span><span class="hl opt">,</span> <span class="hl num">12</span><span class="hl opt">,</span> <span class="hl num">13</span><span class="hl opt">,</span> <span class="hl num">14</span><span class="hl opt">,</span> <span class="hl num">15</span><span class="hl opt">},</span> <span class="hl opt">{</span><span class="hl num">16</span><span class="hl opt">,</span> <span class="hl num">17</span><span class="hl opt">,</span> <span class="hl num">18</span><span class="hl opt">,</span> <span class="hl num">19</span><span class="hl opt">,</span> <span class="hl num">20</span><span class="hl opt">,</span> <span class="hl num">21</span><span class="hl opt">,</span> <span class="hl num">22</span><span class="hl opt">,</span> <span class="hl num">23</span><span class="hl opt">}, {</span><span class="hl num">24</span><span class="hl opt">,</span> <span class="hl num">25</span><span class="hl opt">,</span> <span class="hl num">26</span><span class="hl opt">,</span> <span class="hl num">27</span><span class="hl opt">,</span> <span class="hl num">28</span><span class="hl opt">,</span> <span class="hl num">29</span><span class="hl opt">,</span> <span class="hl num">30</span><span class="hl opt">,</span> <span class="hl num">31</span><span class="hl opt">},</span> <span class="hl opt">{</span><span class="hl num">32</span><span class="hl opt">,</span> <span class="hl num">33</span><span class="hl opt">,</span> <span class="hl num">34</span><span class="hl opt">,</span> <span class="hl num">35</span><span class="hl opt">,</span> <span class="hl num">36</span><span class="hl opt">,</span> <span class="hl num">37</span><span class="hl opt">,</span> <span class="hl num">38</span><span class="hl opt">,</span> <span class="hl num">39</span><span class="hl opt">}, {</span><span class="hl num">40</span><span class="hl opt">,</span> <span class="hl num">41</span><span class="hl opt">,</span> <span class="hl num">42</span><span class="hl opt">,</span> <span class="hl num">43</span><span class="hl opt">,</span> <span class="hl num">44</span><span class="hl opt">,</span> <span class="hl num">45</span><span class="hl opt">,</span> <span class="hl num">46</span><span class="hl opt">,</span> <span class="hl num">47</span><span class="hl opt">},</span> <span class="hl opt">{</span><span class="hl num">48</span><span class="hl opt">,</span> <span class="hl num">49</span><span class="hl opt">,</span> <span class="hl num">50</span><span class="hl opt">,</span> <span class="hl num">51</span><span class="hl opt">,</span> <span class="hl num">52</span><span class="hl opt">,</span> <span class="hl num">53</span><span class="hl opt">,</span> <span class="hl num">54</span><span class="hl opt">,</span> <span class="hl num">55</span><span class="hl opt">}, {</span><span class="hl num">56</span><span class="hl opt">,</span> <span class="hl num">57</span><span class="hl opt">,</span> <span class="hl num">58</span><span class="hl opt">,</span> <span class="hl num">59</span><span class="hl opt">,</span> <span class="hl num">60</span><span class="hl opt">,</span> <span class="hl num">61</span><span class="hl opt">,</span> <span class="hl num">62</span><span class="hl opt">,</span> <span class="hl num">63</span><span class="hl opt">}};</span> H5O_info2_t info<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"Version 2 B-tree chunk index header flush dependencies handled correctly"</span><span class="hl opt">);</span> <span class="hl com">/* Initialize struct */</span> <span class="hl kwd">HDmemset</span><span class="hl opt">(&</span>info<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>info<span class="hl opt">));</span> <span class="hl com">/* Skip this test if SWMR I/O is not supported for the VFD specified</span> <span class="hl com"> * by the environment variable.</span> <span class="hl com"> */</span> <span class="hl kwa">if</span> <span class="hl opt">(!</span><span class="hl kwd">H5FD__supports_swmr_test</span><span class="hl opt">(</span>env_h5_driver<span class="hl opt">)) {</span> <span class="hl kwd">SKIPPED</span><span class="hl opt">();</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">" Test skipped due to VFD not supporting SWMR I/O."</span><span class="hl opt">);</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fapl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_FILE_ACCESS<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_libver_bounds</span><span class="hl opt">(</span>fapl<span class="hl opt">,</span> H5F_LIBVER_LATEST<span class="hl opt">,</span> H5F_LIBVER_LATEST<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">21</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>filename<span class="hl opt">));</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create a chunked dataset with fixed dimensions */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> shape<span class="hl opt">,</span> maxshape<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>tid <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_NATIVE_INT32<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>did <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_BT2_HDR_FD<span class="hl opt">,</span> tid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify the chunk index type */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_idx_type_test</span><span class="hl opt">(</span>did<span class="hl opt">, &</span>idx_type<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>idx_type <span class="hl opt">!=</span> H5D_CHUNK_IDX_BT2<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"should be using fixed array as index"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fstart_swmr_write</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Write data to the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>did <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_BT2_HDR_FD<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>tid <span class="hl opt">=</span> <span class="hl kwd">H5Dget_type</span><span class="hl opt">(</span>did<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>did<span class="hl opt">,</span> tid<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> buffer<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>tid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* The second call triggered a bug in the library (JIRA issue: SWMR-95) */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Oget_info_by_name3</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_BT2_HDR_FD<span class="hl opt">, &</span>info<span class="hl opt">,</span> H5O_INFO_BASIC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Oget_info_by_name3</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_BT2_HDR_FD<span class="hl opt">, &</span>info<span class="hl opt">,</span> H5O_INFO_BASIC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>fapl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>fapl<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>tid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>msid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_bt2_hdr_fd() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_storage_size</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests results from querying the storage size of a dataset,</span> <span class="hl com"> * before/after extending the dimensions.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Quincey Koziol</span> <span class="hl com"> * Monday, April 11, 2016</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_storage_size</span><span class="hl opt">(</span>hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> hid_t fid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* File ID */</span> hid_t dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> dcpl2 <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset creation property list IDs */</span> hid_t sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataspace ID */</span> hid_t dsid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset ID */</span> hsize_t dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">],</span> max_dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Dataset dimensions */</span> hsize_t new_dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* New dataset dimensions */</span> hsize_t chunk_dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Chunk dimensions */</span> <span class="hl kwb">int</span> wdata<span class="hl opt">[</span>STORAGE_SIZE_DIM1<span class="hl opt">][</span>STORAGE_SIZE_DIM2<span class="hl opt">];</span> hsize_t ssize<span class="hl opt">;</span> <span class="hl com">/* Dataset storage size */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"querying storage size"</span><span class="hl opt">);</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">22</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> filename<span class="hl opt">);</span> <span class="hl com">/* Create file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set chunk size */</span> chunk_dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> STORAGE_SIZE_CHUNK_DIM1<span class="hl opt">;</span> chunk_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> STORAGE_SIZE_CHUNK_DIM2<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_dims<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Copy the DCPL, and set it to early allocation */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl2 <span class="hl opt">=</span> <span class="hl kwd">H5Pcopy</span><span class="hl opt">(</span>dcpl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_alloc_time</span><span class="hl opt">(</span>dcpl2<span class="hl opt">,</span> H5D_ALLOC_TIME_EARLY<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create 2D dataspace, with max dims same as current dimensions */</span> dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM1<span class="hl opt">;</span> dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM2<span class="hl opt">;</span> max_dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM1<span class="hl opt">;</span> max_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM2<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> max_dims<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create chunked dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset"</span><span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize buffer to zeroes */</span> <span class="hl kwd">HDmemset</span><span class="hl opt">(</span>wdata<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>wdata<span class="hl opt">));</span> <span class="hl com">/* write elements to dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> wdata<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the storage size */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">== (</span>ssize <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dsid<span class="hl opt">)))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> <span class="hl num">6</span> <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM1 <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM2<span class="hl opt">) !=</span> ssize<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dataset & dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Copy the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Ocopy</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset"</span><span class="hl opt">,</span> fid<span class="hl opt">,</span> <span class="hl str">"dset_copy"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open the copied dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset_copy"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the storage size */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">== (</span>ssize <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dsid<span class="hl opt">)))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> <span class="hl num">6</span> <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM1 <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM2<span class="hl opt">) !=</span> ssize<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close copied dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create 2D dataspace with max dims > current dims (but not unlimited) */</span> dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM1<span class="hl opt">;</span> dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM2<span class="hl opt">;</span> max_dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> STORAGE_SIZE_MAX_DIM1<span class="hl opt">;</span> max_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> STORAGE_SIZE_MAX_DIM2<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> max_dims<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create chunked dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset2"</span><span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize buffer to zeroes */</span> <span class="hl kwd">HDmemset</span><span class="hl opt">(</span>wdata<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>wdata<span class="hl opt">));</span> <span class="hl com">/* write elements to dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> wdata<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the storage size */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">== (</span>ssize <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dsid<span class="hl opt">)))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> <span class="hl num">6</span> <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM1 <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM2<span class="hl opt">) !=</span> ssize<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Extend dataset's dimensions */</span> new_dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM1 <span class="hl opt">*</span> <span class="hl num">2</span><span class="hl opt">;</span> new_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM2 <span class="hl opt">*</span> <span class="hl num">2</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dset_extent</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> new_dims<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the storage size */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">== (</span>ssize <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dsid<span class="hl opt">)))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> <span class="hl num">6</span> <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM1 <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM2<span class="hl opt">) !=</span> ssize<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dataset & dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Copy the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Ocopy</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset2"</span><span class="hl opt">,</span> fid<span class="hl opt">,</span> <span class="hl str">"dset2_copy"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open the copied dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset2_copy"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the storage size */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">== (</span>ssize <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dsid<span class="hl opt">)))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> <span class="hl num">6</span> <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM1 <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM2<span class="hl opt">) !=</span> ssize<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close copied dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create 2D dataspace with max dims > current dims (but not unlimited) */</span> dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM1<span class="hl opt">;</span> dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM2<span class="hl opt">;</span> max_dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> STORAGE_SIZE_MAX_DIM1<span class="hl opt">;</span> max_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> STORAGE_SIZE_MAX_DIM2<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> max_dims<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create chunked dataset, w/early allocation */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset2a"</span><span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize buffer to zeroes */</span> <span class="hl kwd">HDmemset</span><span class="hl opt">(</span>wdata<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>wdata<span class="hl opt">));</span> <span class="hl com">/* write elements to dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> wdata<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the storage size */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">== (</span>ssize <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dsid<span class="hl opt">)))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> <span class="hl num">6</span> <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM1 <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM2<span class="hl opt">) !=</span> ssize<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Extend dataset's dimensions */</span> new_dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM1 <span class="hl opt">*</span> <span class="hl num">2</span><span class="hl opt">;</span> new_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM2 <span class="hl opt">*</span> <span class="hl num">2</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dset_extent</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> new_dims<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the storage size */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">== (</span>ssize <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dsid<span class="hl opt">)))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> <span class="hl num">15</span> <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM1 <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM2<span class="hl opt">) !=</span> ssize<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dataset & dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Copy the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Ocopy</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset2a"</span><span class="hl opt">,</span> fid<span class="hl opt">,</span> <span class="hl str">"dset2a_copy"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open the copied dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset2a_copy"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the storage size */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">== (</span>ssize <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dsid<span class="hl opt">)))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> <span class="hl num">15</span> <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM1 <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM2<span class="hl opt">) !=</span> ssize<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close copied dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create 2D dataspace with max dims > current dims (and 1 unlimited dim) */</span> dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM1<span class="hl opt">;</span> dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM2<span class="hl opt">;</span> max_dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> H5S_UNLIMITED<span class="hl opt">;</span> max_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> STORAGE_SIZE_MAX_DIM2<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> max_dims<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create chunked dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset3"</span><span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize buffer to zeroes */</span> <span class="hl kwd">HDmemset</span><span class="hl opt">(</span>wdata<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>wdata<span class="hl opt">));</span> <span class="hl com">/* write elements to dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> wdata<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the storage size */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">== (</span>ssize <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dsid<span class="hl opt">)))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> <span class="hl num">6</span> <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM1 <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM2<span class="hl opt">) !=</span> ssize<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Extend dataset's dimensions */</span> new_dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM1 <span class="hl opt">*</span> <span class="hl num">2</span><span class="hl opt">;</span> new_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM2 <span class="hl opt">*</span> <span class="hl num">2</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dset_extent</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> new_dims<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the storage size */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">== (</span>ssize <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dsid<span class="hl opt">)))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> <span class="hl num">6</span> <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM1 <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM2<span class="hl opt">) !=</span> ssize<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dataset & dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Copy the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Ocopy</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset3"</span><span class="hl opt">,</span> fid<span class="hl opt">,</span> <span class="hl str">"dset3_copy"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open the copied dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset3_copy"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the storage size */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">== (</span>ssize <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dsid<span class="hl opt">)))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> <span class="hl num">6</span> <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM1 <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM2<span class="hl opt">) !=</span> ssize<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close copied dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create 2D dataspace with max dims > current dims (and 1 unlimited dim) */</span> dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM1<span class="hl opt">;</span> dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM2<span class="hl opt">;</span> max_dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> H5S_UNLIMITED<span class="hl opt">;</span> max_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> STORAGE_SIZE_MAX_DIM2<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> max_dims<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create chunked dataset, w/early allocation */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset3a"</span><span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize buffer to zeroes */</span> <span class="hl kwd">HDmemset</span><span class="hl opt">(</span>wdata<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>wdata<span class="hl opt">));</span> <span class="hl com">/* write elements to dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> wdata<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the storage size */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">== (</span>ssize <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dsid<span class="hl opt">)))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> <span class="hl num">6</span> <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM1 <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM2<span class="hl opt">) !=</span> ssize<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Extend dataset's dimensions */</span> new_dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM1 <span class="hl opt">*</span> <span class="hl num">2</span><span class="hl opt">;</span> new_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM2 <span class="hl opt">*</span> <span class="hl num">2</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dset_extent</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> new_dims<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the storage size */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">== (</span>ssize <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dsid<span class="hl opt">)))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> <span class="hl num">15</span> <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM1 <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM2<span class="hl opt">) !=</span> ssize<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dataset & dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Copy the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Ocopy</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset3a"</span><span class="hl opt">,</span> fid<span class="hl opt">,</span> <span class="hl str">"dset3a_copy"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open the copied dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset3a_copy"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the storage size */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">== (</span>ssize <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dsid<span class="hl opt">)))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> <span class="hl num">15</span> <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM1 <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM2<span class="hl opt">) !=</span> ssize<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close copied dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create 2D dataspace with max dims > current dims (and 2 unlimited dims) */</span> dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM1<span class="hl opt">;</span> dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM2<span class="hl opt">;</span> max_dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> H5S_UNLIMITED<span class="hl opt">;</span> max_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> H5S_UNLIMITED<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> max_dims<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create chunked dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset4"</span><span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize buffer to zeroes */</span> <span class="hl kwd">HDmemset</span><span class="hl opt">(</span>wdata<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>wdata<span class="hl opt">));</span> <span class="hl com">/* write elements to dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> wdata<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the storage size */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">== (</span>ssize <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dsid<span class="hl opt">)))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> <span class="hl num">6</span> <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM1 <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM2<span class="hl opt">) !=</span> ssize<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Extend dataset's dimensions */</span> new_dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM1 <span class="hl opt">*</span> <span class="hl num">2</span><span class="hl opt">;</span> new_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM2 <span class="hl opt">*</span> <span class="hl num">2</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dset_extent</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> new_dims<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the storage size */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">== (</span>ssize <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dsid<span class="hl opt">)))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> <span class="hl num">6</span> <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM1 <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM2<span class="hl opt">) !=</span> ssize<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dataset & dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Copy the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Ocopy</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset4"</span><span class="hl opt">,</span> fid<span class="hl opt">,</span> <span class="hl str">"dset4_copy"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open the copied dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset4_copy"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the storage size */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">== (</span>ssize <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dsid<span class="hl opt">)))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> <span class="hl num">6</span> <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM1 <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM2<span class="hl opt">) !=</span> ssize<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close copied dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create 2D dataspace with max dims > current dims (and 2 unlimited dims) */</span> dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM1<span class="hl opt">;</span> dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM2<span class="hl opt">;</span> max_dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> H5S_UNLIMITED<span class="hl opt">;</span> max_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> H5S_UNLIMITED<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> max_dims<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create chunked dataset, w/early allocation */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset4a"</span><span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl2<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize buffer to zeroes */</span> <span class="hl kwd">HDmemset</span><span class="hl opt">(</span>wdata<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>wdata<span class="hl opt">));</span> <span class="hl com">/* write elements to dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> wdata<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the storage size */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">== (</span>ssize <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dsid<span class="hl opt">)))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> <span class="hl num">6</span> <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM1 <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM2<span class="hl opt">) !=</span> ssize<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Extend dataset's dimensions */</span> new_dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM1 <span class="hl opt">*</span> <span class="hl num">2</span><span class="hl opt">;</span> new_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> STORAGE_SIZE_DIM2 <span class="hl opt">*</span> <span class="hl num">2</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dset_extent</span><span class="hl opt">(</span>dsid<span class="hl opt">,</span> new_dims<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the storage size */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">== (</span>ssize <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dsid<span class="hl opt">)))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> <span class="hl num">15</span> <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM1 <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM2<span class="hl opt">) !=</span> ssize<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close dataset & dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Copy the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Ocopy</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset4a"</span><span class="hl opt">,</span> fid<span class="hl opt">,</span> <span class="hl str">"dset4a_copy"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Open the copied dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dsid <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset4a_copy"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the storage size */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">== (</span>ssize <span class="hl opt">=</span> <span class="hl kwd">H5Dget_storage_size</span><span class="hl opt">(</span>dsid<span class="hl opt">)))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">) *</span> <span class="hl num">15</span> <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM1 <span class="hl opt">*</span> STORAGE_SIZE_CHUNK_DIM2<span class="hl opt">) !=</span> ssize<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close copied dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close rest */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl2<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dsid<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_storage_size() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_power2up</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests that the H5VM_power2up(n) function does not result in an</span> <span class="hl com"> * infinite loop when input n exceeds 2^63. (HDFFV-10217)</span> <span class="hl com"> * H5VM_power2up() is used to calculate the next power of 2 for</span> <span class="hl com"> * a dataset's scaled dimension sizes.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Vailin Choi; June 2017</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_power2up</span><span class="hl opt">(</span>hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> hid_t fid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* File ID */</span> hid_t dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset creation property list */</span> hid_t sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataspace ID */</span> hid_t did <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset ID */</span> hsize_t dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Dataset dimension sizes */</span> hsize_t max_dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Maximum dimension sizes */</span> hsize_t chunk_dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Chunk dimensions */</span> hsize_t ext_dims<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Extended dimension sizes */</span> herr_t status<span class="hl opt">;</span> <span class="hl com">/* Error status */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"the next power of 2"</span><span class="hl opt">);</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">24</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> filename<span class="hl opt">);</span> <span class="hl com">/* Create file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set dims[1] to ((2^63) -1) */</span> dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">0</span><span class="hl opt">;</span> dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = ((</span>hsize_t<span class="hl opt">)</span><span class="hl num">1</span> <span class="hl opt"><< ((</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span>hsize_t<span class="hl opt">) *</span> CHAR_BIT<span class="hl opt">) -</span> <span class="hl num">1</span><span class="hl opt">)) -</span> <span class="hl num">1</span><span class="hl opt">;</span> max_dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> max_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> H5S_UNLIMITED<span class="hl opt">;</span> sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">2</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> max_dims<span class="hl opt">);</span> <span class="hl com">/* Create dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set chunk size */</span> chunk_dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> chunk_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> chunk_dims<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create chunked dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>did <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> <span class="hl str">"dset"</span><span class="hl opt">,</span> H5T_NATIVE_INT64<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> ext_dims<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> ext_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] +</span> <span class="hl num">5</span><span class="hl opt">;</span> <span class="hl com">/* Extend to (2^63)+ */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Dset_extent</span><span class="hl opt">(</span>did<span class="hl opt">,</span> ext_dims<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Closing */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_power2up() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_scatter</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests H5Dscatter with a variety of different selections</span> <span class="hl com"> * and source buffer sizes.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Neil Fortner</span> <span class="hl com"> * Wednesday, January 16, 2013</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwc">typedef</span> <span class="hl kwb">struct</span> scatter_info_t <span class="hl opt">{</span> <span class="hl kwb">int</span> <span class="hl opt">*</span> src_buf<span class="hl opt">;</span> <span class="hl com">/* Source data buffer */</span> <span class="hl kwb">size_t</span> block<span class="hl opt">;</span> <span class="hl com">/* Maximum number of elements to return to H5Dscatter() */</span> <span class="hl kwb">size_t</span> size<span class="hl opt">;</span> <span class="hl com">/* Remaining number of elements to return */</span> <span class="hl opt">}</span> scatter_info_t<span class="hl opt">;</span> <span class="hl ppc">#define TEST_SCATTER_CHECK_ARR(ARR, EXP) \</span> <span class="hl ppc"> for (i = 0; i < (int)(sizeof(ARR) / sizeof(ARR[0])); i++) \</span> <span class="hl ppc"> for (j = 0; j < (int)(sizeof(ARR[0]) / sizeof(ARR[0][0])); j++) \</span> <span class="hl ppc"> for (k = 0; k < (int)(sizeof(ARR[0][0]) / sizeof(ARR[0][0][0])); k++) \</span> <span class="hl ppc"> if (ARR[i][j][k] != EXP[i][j][k]) { \</span> <span class="hl ppc"> H5_FAILED(); \</span> <span class="hl ppc"> AT(); \</span> <span class="hl ppc"> HDprintf(</span><span class="hl pps">" "</span><span class="hl ppc"> #ARR</span> <span class="hl pps">"[%d][%d][%d] == %d, "</span><span class="hl ppc"> #EXP</span> <span class="hl pps">"[%d][%d][%d] == %d</span><span class="hl esc">\n</span><span class="hl pps">"</span><span class="hl ppc">, i, j, k, \</span> <span class="hl ppc"> ARR[i][j][k], i, j, k, EXP[i][j][k]); \</span> <span class="hl ppc"> goto error; \</span> <span class="hl ppc"> }</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">scatter_cb</span><span class="hl opt">(</span><span class="hl kwb">void</span> <span class="hl opt">**</span>src_buf <span class="hl com">/*out*/</span><span class="hl opt">,</span> <span class="hl kwb">size_t</span> <span class="hl opt">*</span>src_buf_bytes_used <span class="hl com">/*out*/</span><span class="hl opt">,</span> <span class="hl kwb">void</span> <span class="hl opt">*</span>_scatter_info<span class="hl opt">)</span> <span class="hl opt">{</span> scatter_info_t <span class="hl opt">*</span>scatter_info <span class="hl opt">= (</span>scatter_info_t <span class="hl opt">*)</span>_scatter_info<span class="hl opt">;</span> <span class="hl kwb">size_t</span> nelmts<span class="hl opt">;</span> <span class="hl com">/* Number of elements to return in src_buf */</span> <span class="hl com">/* Calculate number of elements */</span> nelmts <span class="hl opt">=</span> <span class="hl kwd">MIN</span><span class="hl opt">(</span>scatter_info<span class="hl opt">-></span>block<span class="hl opt">,</span> scatter_info<span class="hl opt">-></span>size<span class="hl opt">);</span> <span class="hl kwd">HDassert</span><span class="hl opt">(</span>nelmts <span class="hl opt">></span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl com">/* Set output variables */</span> <span class="hl opt">*</span>src_buf <span class="hl opt">= (</span><span class="hl kwb">void</span> <span class="hl opt">*)</span>scatter_info<span class="hl opt">-></span>src_buf<span class="hl opt">;</span> <span class="hl opt">*</span>src_buf_bytes_used <span class="hl opt">=</span> nelmts <span class="hl opt">*</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>scatter_info<span class="hl opt">-></span>src_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]);</span> <span class="hl com">/* Update scatter_info */</span> scatter_info<span class="hl opt">-></span>src_buf <span class="hl opt">+=</span> nelmts<span class="hl opt">;</span> scatter_info<span class="hl opt">-></span>size <span class="hl opt">-=</span> nelmts<span class="hl opt">;</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_scatter</span><span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span> <span class="hl opt">{</span> hid_t sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataspace ID */</span> hsize_t dim<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">] = {</span><span class="hl num">8</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">,</span> <span class="hl num">8</span><span class="hl opt">};</span> <span class="hl com">/* Dataspace dimensions */</span> hsize_t start<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">] = {</span><span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">};</span> hsize_t stride<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">] = {</span><span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">};</span> hsize_t count<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">] = {</span><span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">};</span> hsize_t block<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">] = {</span><span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">};</span> hsize_t start2<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">] = {</span><span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">};</span> hsize_t count2<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">] = {</span><span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">};</span> hsize_t point<span class="hl opt">[</span><span class="hl num">4</span><span class="hl opt">][</span><span class="hl num">3</span><span class="hl opt">] = {{</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">3</span><span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">}, {</span><span class="hl num">3</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">}, {</span><span class="hl num">7</span><span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">}, {</span><span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">}};</span> <span class="hl kwb">size_t</span> src_buf_size<span class="hl opt">;</span> <span class="hl kwb">int</span> src_buf<span class="hl opt">[</span><span class="hl num">36</span><span class="hl opt">];</span> <span class="hl com">/* Source data buffer */</span> <span class="hl kwb">int</span> dst_buf<span class="hl opt">[</span><span class="hl num">8</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">][</span><span class="hl num">8</span><span class="hl opt">];</span> <span class="hl com">/* Destination data buffer */</span> <span class="hl kwb">int</span> expect_dst_buf<span class="hl opt">[</span><span class="hl num">8</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">][</span><span class="hl num">8</span><span class="hl opt">];</span> <span class="hl com">/* Expected destination data buffer */</span> scatter_info_t scatter_info<span class="hl opt">;</span> <span class="hl com">/* Operator data for callback */</span> <span class="hl kwb">int</span> i<span class="hl opt">,</span> j<span class="hl opt">,</span> k<span class="hl opt">,</span> src_i<span class="hl opt">;</span> <span class="hl com">/* Local index variables */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"H5Dscatter()"</span><span class="hl opt">);</span> <span class="hl com">/* Create dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">3</span><span class="hl opt">,</span> dim<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize src_buf */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">int</span><span class="hl opt">)(</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span>src_buf<span class="hl opt">) /</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>src_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]));</span> i<span class="hl opt">++)</span> src_buf<span class="hl opt">[</span>i<span class="hl opt">] =</span> i <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/*</span> <span class="hl com"> * Test 1: Simple case</span> <span class="hl com"> */</span> <span class="hl com">/* Select hyperslab */</span> count<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> <span class="hl num">8</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> start<span class="hl opt">,</span> NULL<span class="hl opt">,</span> count<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize dst_buf and expect_dst_buf */</span> <span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span><span class="hl kwd">HDmemset</span><span class="hl opt">(</span>expect_dst_buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>expect_dst_buf<span class="hl opt">));</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl num">8</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> expect_dst_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">][</span><span class="hl num">0</span><span class="hl opt">][</span>i<span class="hl opt">] =</span> src_buf<span class="hl opt">[</span>i<span class="hl opt">];</span> <span class="hl com">/* Loop over buffer sizes */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>src_buf_size <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> src_buf_size <span class="hl opt"><=</span> <span class="hl num">9</span><span class="hl opt">;</span> src_buf_size<span class="hl opt">++) {</span> <span class="hl com">/* Reset dst_buf */</span> <span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span><span class="hl kwd">HDmemset</span><span class="hl opt">(</span>dst_buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">));</span> <span class="hl com">/* Set up scatter info */</span> scatter_info<span class="hl opt">.</span>src_buf <span class="hl opt">=</span> src_buf<span class="hl opt">;</span> scatter_info<span class="hl opt">.</span>block <span class="hl opt">=</span> src_buf_size<span class="hl opt">;</span> scatter_info<span class="hl opt">.</span>size <span class="hl opt">=</span> <span class="hl num">8</span><span class="hl opt">;</span> <span class="hl com">/* Scatter data */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dscatter</span><span class="hl opt">((</span>H5D_scatter_func_t<span class="hl opt">)</span>scatter_cb<span class="hl opt">, &</span>scatter_info<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> dst_buf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify data */</span> <span class="hl kwd">TEST_SCATTER_CHECK_ARR</span><span class="hl opt">(</span>dst_buf<span class="hl opt">,</span> expect_dst_buf<span class="hl opt">)</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/*</span> <span class="hl com"> * Test 2: Single block in dataset</span> <span class="hl com"> */</span> <span class="hl com">/* Select hyperslab */</span> start<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">3</span><span class="hl opt">;</span> start<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">2</span><span class="hl opt">;</span> start<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> <span class="hl num">4</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">2</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">3</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> <span class="hl num">2</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> start<span class="hl opt">,</span> NULL<span class="hl opt">,</span> count<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize expect_dst_buf */</span> <span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span><span class="hl kwd">HDmemset</span><span class="hl opt">(</span>expect_dst_buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>expect_dst_buf<span class="hl opt">));</span> src_i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">3</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl num">5</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">2</span><span class="hl opt">;</span> j <span class="hl opt"><</span> <span class="hl num">5</span><span class="hl opt">;</span> j<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>k <span class="hl opt">=</span> <span class="hl num">4</span><span class="hl opt">;</span> k <span class="hl opt"><</span> <span class="hl num">6</span><span class="hl opt">;</span> k<span class="hl opt">++)</span> expect_dst_buf<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">][</span>k<span class="hl opt">] =</span> src_buf<span class="hl opt">[</span>src_i<span class="hl opt">++];</span> <span class="hl com">/* Loop over buffer sizes */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>src_buf_size <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> src_buf_size <span class="hl opt"><=</span> <span class="hl num">13</span><span class="hl opt">;</span> src_buf_size<span class="hl opt">++) {</span> <span class="hl com">/* Reset dst_buf */</span> <span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span><span class="hl kwd">HDmemset</span><span class="hl opt">(</span>dst_buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">));</span> <span class="hl com">/* Set up scatter info */</span> scatter_info<span class="hl opt">.</span>src_buf <span class="hl opt">=</span> src_buf<span class="hl opt">;</span> scatter_info<span class="hl opt">.</span>block <span class="hl opt">=</span> src_buf_size<span class="hl opt">;</span> scatter_info<span class="hl opt">.</span>size <span class="hl opt">=</span> <span class="hl num">12</span><span class="hl opt">;</span> <span class="hl com">/* Scatter data */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dscatter</span><span class="hl opt">((</span>H5D_scatter_func_t<span class="hl opt">)</span>scatter_cb<span class="hl opt">, &</span>scatter_info<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> dst_buf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify data */</span> <span class="hl kwd">TEST_SCATTER_CHECK_ARR</span><span class="hl opt">(</span>dst_buf<span class="hl opt">,</span> expect_dst_buf<span class="hl opt">)</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/*</span> <span class="hl com"> * Test 3: Multiple blocks</span> <span class="hl com"> */</span> <span class="hl com">/* Select hyperslab */</span> start<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> start<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> start<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> stride<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">3</span><span class="hl opt">;</span> stride<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">4</span><span class="hl opt">;</span> stride<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> <span class="hl num">5</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">3</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> <span class="hl num">2</span><span class="hl opt">;</span> block<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> block<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">3</span><span class="hl opt">;</span> block<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> <span class="hl num">2</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> start<span class="hl opt">,</span> stride<span class="hl opt">,</span> count<span class="hl opt">,</span> block<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize expect_dst_buf */</span> <span class="hl com">/* Iterate over block containing selection, checking if each element is in</span> <span class="hl com"> * selection. Note that the algorithm used here (if statement) would not</span> <span class="hl com"> * work for overlapping hyperslabs. */</span> <span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span><span class="hl kwd">HDmemset</span><span class="hl opt">(</span>expect_dst_buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>expect_dst_buf<span class="hl opt">));</span> src_i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl num">8</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> j <span class="hl opt"><</span> <span class="hl num">4</span><span class="hl opt">;</span> j<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>k <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> k <span class="hl opt"><</span> <span class="hl num">8</span><span class="hl opt">;</span> k<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>hsize_t<span class="hl opt">)</span>i <span class="hl opt">>=</span> start<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] && ((</span>hsize_t<span class="hl opt">)</span>i <span class="hl opt">-</span> start<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]) %</span> stride<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] <</span> block<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] &&</span> <span class="hl opt">((</span>hsize_t<span class="hl opt">)</span>i <span class="hl opt">-</span> start<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]) /</span> stride<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] <</span> count<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] && (</span>hsize_t<span class="hl opt">)</span>j <span class="hl opt">>=</span> start<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] &&</span> <span class="hl opt">((</span>hsize_t<span class="hl opt">)</span>j <span class="hl opt">-</span> start<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]) %</span> stride<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] <</span> block<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] &&</span> <span class="hl opt">((</span>hsize_t<span class="hl opt">)</span>j <span class="hl opt">-</span> start<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]) /</span> stride<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] <</span> count<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] && (</span>hsize_t<span class="hl opt">)</span>k <span class="hl opt">>=</span> start<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] &&</span> <span class="hl opt">((</span>hsize_t<span class="hl opt">)</span>k <span class="hl opt">-</span> start<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">]) %</span> stride<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] <</span> block<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] &&</span> <span class="hl opt">((</span>hsize_t<span class="hl opt">)</span>k <span class="hl opt">-</span> start<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">]) /</span> stride<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] <</span> count<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">])</span> expect_dst_buf<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">][</span>k<span class="hl opt">] =</span> src_buf<span class="hl opt">[</span>src_i<span class="hl opt">++];</span> <span class="hl com">/* Loop over buffer sizes */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>src_buf_size <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> src_buf_size <span class="hl opt"><=</span> <span class="hl num">37</span><span class="hl opt">;</span> src_buf_size<span class="hl opt">++) {</span> <span class="hl com">/* Reset dst_buf */</span> <span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span><span class="hl kwd">HDmemset</span><span class="hl opt">(</span>dst_buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">));</span> <span class="hl com">/* Set up scatter info */</span> scatter_info<span class="hl opt">.</span>src_buf <span class="hl opt">=</span> src_buf<span class="hl opt">;</span> scatter_info<span class="hl opt">.</span>block <span class="hl opt">=</span> src_buf_size<span class="hl opt">;</span> scatter_info<span class="hl opt">.</span>size <span class="hl opt">=</span> <span class="hl num">36</span><span class="hl opt">;</span> <span class="hl com">/* Scatter data */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dscatter</span><span class="hl opt">((</span>H5D_scatter_func_t<span class="hl opt">)</span>scatter_cb<span class="hl opt">, &</span>scatter_info<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> dst_buf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify data */</span> <span class="hl kwd">TEST_SCATTER_CHECK_ARR</span><span class="hl opt">(</span>dst_buf<span class="hl opt">,</span> expect_dst_buf<span class="hl opt">)</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/*</span> <span class="hl com"> * Test 4: Compound selection</span> <span class="hl com"> */</span> <span class="hl com">/* Select hyperslabs */</span> start<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">2</span><span class="hl opt">;</span> start<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> start<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">2</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">3</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> <span class="hl num">2</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> start<span class="hl opt">,</span> NULL<span class="hl opt">,</span> count<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> start2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> start2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">2</span><span class="hl opt">;</span> start2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> <span class="hl num">2</span><span class="hl opt">;</span> count2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">3</span><span class="hl opt">;</span> count2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">2</span><span class="hl opt">;</span> count2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> <span class="hl num">2</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_XOR<span class="hl opt">,</span> start2<span class="hl opt">,</span> NULL<span class="hl opt">,</span> count2<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize expect_dst_buf */</span> <span class="hl com">/* Iterate over block containing selection, checking if each element is in</span> <span class="hl com"> * selection. */</span> <span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span><span class="hl kwd">HDmemset</span><span class="hl opt">(</span>expect_dst_buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>expect_dst_buf<span class="hl opt">));</span> src_i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl num">4</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> j <span class="hl opt"><</span> <span class="hl num">4</span><span class="hl opt">;</span> j<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>k <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> k <span class="hl opt"><</span> <span class="hl num">4</span><span class="hl opt">;</span> k<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(!(((</span>hsize_t<span class="hl opt">)</span>i <span class="hl opt">>=</span> start<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] && (</span>hsize_t<span class="hl opt">)</span>i <span class="hl opt"><</span> start<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] +</span> count<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]) &&</span> <span class="hl opt">((</span>hsize_t<span class="hl opt">)</span>j <span class="hl opt">>=</span> start<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] && (</span>hsize_t<span class="hl opt">)</span>j <span class="hl opt"><</span> start<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] +</span> count<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]) &&</span> <span class="hl opt">((</span>hsize_t<span class="hl opt">)</span>k <span class="hl opt">>=</span> start<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] && (</span>hsize_t<span class="hl opt">)</span>k <span class="hl opt"><</span> start<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] +</span> count<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">])) !=</span> <span class="hl opt">!(((</span>hsize_t<span class="hl opt">)</span>i <span class="hl opt">>=</span> start2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] && (</span>hsize_t<span class="hl opt">)</span>i <span class="hl opt"><</span> start2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] +</span> count2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]) &&</span> <span class="hl opt">((</span>hsize_t<span class="hl opt">)</span>j <span class="hl opt">>=</span> start2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] && (</span>hsize_t<span class="hl opt">)</span>j <span class="hl opt"><</span> start2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] +</span> count2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]) &&</span> <span class="hl opt">((</span>hsize_t<span class="hl opt">)</span>k <span class="hl opt">>=</span> start2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] && (</span>hsize_t<span class="hl opt">)</span>k <span class="hl opt"><</span> start2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] +</span> count2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">])))</span> expect_dst_buf<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">][</span>k<span class="hl opt">] =</span> src_buf<span class="hl opt">[</span>src_i<span class="hl opt">++];</span> <span class="hl com">/* Loop over buffer sizes */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>src_buf_size <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> src_buf_size <span class="hl opt"><=</span> <span class="hl num">17</span><span class="hl opt">;</span> src_buf_size<span class="hl opt">++) {</span> <span class="hl com">/* Reset dst_buf */</span> <span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span><span class="hl kwd">HDmemset</span><span class="hl opt">(</span>dst_buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">));</span> <span class="hl com">/* Set up scatter info */</span> scatter_info<span class="hl opt">.</span>src_buf <span class="hl opt">=</span> src_buf<span class="hl opt">;</span> scatter_info<span class="hl opt">.</span>block <span class="hl opt">=</span> src_buf_size<span class="hl opt">;</span> scatter_info<span class="hl opt">.</span>size <span class="hl opt">=</span> <span class="hl num">16</span><span class="hl opt">;</span> <span class="hl com">/* Scatter data */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dscatter</span><span class="hl opt">((</span>H5D_scatter_func_t<span class="hl opt">)</span>scatter_cb<span class="hl opt">, &</span>scatter_info<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> dst_buf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify data */</span> <span class="hl kwd">TEST_SCATTER_CHECK_ARR</span><span class="hl opt">(</span>dst_buf<span class="hl opt">,</span> expect_dst_buf<span class="hl opt">)</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/*</span> <span class="hl com"> * Test 5: Point selection</span> <span class="hl com"> */</span> <span class="hl com">/* Select hyperslabs */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_elements</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>point<span class="hl opt">) /</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>point<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]), (</span>hsize_t <span class="hl opt">*)</span>point<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize expect_dst_buf */</span> <span class="hl com">/* Iterate over block containing selection, checking if each element is in</span> <span class="hl com"> * selection. */</span> <span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span><span class="hl kwd">HDmemset</span><span class="hl opt">(</span>expect_dst_buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>expect_dst_buf<span class="hl opt">));</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">int</span><span class="hl opt">)(</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span>point<span class="hl opt">) /</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>point<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]));</span> i<span class="hl opt">++)</span> expect_dst_buf<span class="hl opt">[</span>point<span class="hl opt">[</span>i<span class="hl opt">][</span><span class="hl num">0</span><span class="hl opt">]][</span>point<span class="hl opt">[</span>i<span class="hl opt">][</span><span class="hl num">1</span><span class="hl opt">]][</span>point<span class="hl opt">[</span>i<span class="hl opt">][</span><span class="hl num">2</span><span class="hl opt">]] =</span> src_buf<span class="hl opt">[</span>i<span class="hl opt">];</span> <span class="hl com">/* Loop over buffer sizes */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>src_buf_size <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> src_buf_size <span class="hl opt"><=</span> <span class="hl num">5</span><span class="hl opt">;</span> src_buf_size<span class="hl opt">++) {</span> <span class="hl com">/* Reset dst_buf */</span> <span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span><span class="hl kwd">HDmemset</span><span class="hl opt">(</span>dst_buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">));</span> <span class="hl com">/* Set up scatter info */</span> scatter_info<span class="hl opt">.</span>src_buf <span class="hl opt">=</span> src_buf<span class="hl opt">;</span> scatter_info<span class="hl opt">.</span>block <span class="hl opt">=</span> src_buf_size<span class="hl opt">;</span> scatter_info<span class="hl opt">.</span>size <span class="hl opt">=</span> <span class="hl num">4</span><span class="hl opt">;</span> <span class="hl com">/* Scatter data */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dscatter</span><span class="hl opt">((</span>H5D_scatter_func_t<span class="hl opt">)</span>scatter_cb<span class="hl opt">, &</span>scatter_info<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> dst_buf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify data */</span> <span class="hl kwd">TEST_SCATTER_CHECK_ARR</span><span class="hl opt">(</span>dst_buf<span class="hl opt">,</span> expect_dst_buf<span class="hl opt">)</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/* Close everything */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_scatter() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_gather</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests H5Dgather with a variety of different selections and</span> <span class="hl com"> * destination buffer sizes.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Neil Fortner</span> <span class="hl com"> * Wednesday, January 16, 2013</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwc">typedef</span> <span class="hl kwb">struct</span> gather_info_t <span class="hl opt">{</span> <span class="hl kwb">int</span> <span class="hl opt">*</span> expect_dst_buf<span class="hl opt">;</span> <span class="hl com">/* Expected destination data buffer */</span> <span class="hl kwb">size_t</span> max_nelmts<span class="hl opt">;</span> <span class="hl com">/* Maximum number of elements passed to callback */</span> hbool_t last_call<span class="hl opt">;</span> <span class="hl com">/* Whether this should be the last time the callback is called */</span> <span class="hl opt">}</span> gather_info_t<span class="hl opt">;</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">gather_cb</span><span class="hl opt">(</span><span class="hl kwb">const void</span> <span class="hl opt">*</span>dst_buf<span class="hl opt">,</span> <span class="hl kwb">size_t</span> dst_buf_bytes_used<span class="hl opt">,</span> <span class="hl kwb">void</span> <span class="hl opt">*</span>_gather_info<span class="hl opt">)</span> <span class="hl opt">{</span> gather_info_t <span class="hl opt">*</span>gather_info <span class="hl opt">= (</span>gather_info_t <span class="hl opt">*)</span>_gather_info<span class="hl opt">;</span> <span class="hl kwb">size_t</span> nelmts<span class="hl opt">;</span> <span class="hl com">/* Number of elements in src_buf */</span> <span class="hl kwb">int</span> i<span class="hl opt">;</span> <span class="hl com">/* Local index variable */</span> <span class="hl kwd">HDassert</span><span class="hl opt">(</span>dst_buf_bytes_used <span class="hl opt">></span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl com">/* Calculate number of elements */</span> nelmts <span class="hl opt">=</span> dst_buf_bytes_used <span class="hl opt">/</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>gather_info<span class="hl opt">-></span>expect_dst_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]);</span> <span class="hl com">/* Make sure the number of bytes is a multiple of the number of elements */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>nelmts <span class="hl opt">*</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>gather_info<span class="hl opt">-></span>expect_dst_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]) !=</span> dst_buf_bytes_used<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Make sure we weren't passed more data than we requested to be passed at</span> <span class="hl com"> * once */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>nelmts <span class="hl opt">></span> gather_info<span class="hl opt">-></span>max_nelmts<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* If we were passed less data than requested, make sure this is the last</span> <span class="hl com"> * time the callback was called */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>gather_info<span class="hl opt">-></span>last_call<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>nelmts <span class="hl opt"><</span> gather_info<span class="hl opt">-></span>max_nelmts<span class="hl opt">)</span> gather_info<span class="hl opt">-></span>last_call <span class="hl opt">=</span> TRUE<span class="hl opt">;</span> <span class="hl com">/* Compare data and expected data */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">int</span><span class="hl opt">)</span>nelmts<span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(((</span><span class="hl kwb">const int</span> <span class="hl opt">*)</span>dst_buf<span class="hl opt">)[</span>i<span class="hl opt">] != *((</span>gather_info<span class="hl opt">-></span>expect_dst_buf<span class="hl opt">)++))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end gather_cb() */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_gather</span><span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span> <span class="hl opt">{</span> hid_t sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataspace ID */</span> hsize_t dim<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">] = {</span><span class="hl num">8</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">,</span> <span class="hl num">8</span><span class="hl opt">};</span> <span class="hl com">/* Dataspace dimensions */</span> hsize_t start<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">] = {</span><span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">};</span> hsize_t stride<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">] = {</span><span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">};</span> hsize_t count<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">] = {</span><span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">};</span> hsize_t block<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">] = {</span><span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">};</span> hsize_t start2<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">] = {</span><span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">};</span> hsize_t count2<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">] = {</span><span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">};</span> hsize_t point<span class="hl opt">[</span><span class="hl num">4</span><span class="hl opt">][</span><span class="hl num">3</span><span class="hl opt">] = {{</span><span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">3</span><span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">}, {</span><span class="hl num">3</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">}, {</span><span class="hl num">7</span><span class="hl opt">,</span> <span class="hl num">2</span><span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">}, {</span><span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> <span class="hl num">5</span><span class="hl opt">}};</span> <span class="hl kwb">size_t</span> dst_buf_size<span class="hl opt">;</span> <span class="hl kwb">int</span> src_buf<span class="hl opt">[</span><span class="hl num">8</span><span class="hl opt">][</span><span class="hl num">5</span><span class="hl opt">][</span><span class="hl num">8</span><span class="hl opt">];</span> <span class="hl com">/* Source data buffer */</span> <span class="hl kwb">int</span> dst_buf<span class="hl opt">[</span><span class="hl num">36</span><span class="hl opt">];</span> <span class="hl com">/* Destination data buffer */</span> <span class="hl kwb">int</span> expect_dst_buf<span class="hl opt">[</span><span class="hl num">36</span><span class="hl opt">];</span> <span class="hl com">/* Expected destination data buffer */</span> gather_info_t gather_info<span class="hl opt">;</span> <span class="hl com">/* Operator data for callback */</span> <span class="hl kwb">int</span> i<span class="hl opt">,</span> j<span class="hl opt">,</span> k<span class="hl opt">,</span> dst_i<span class="hl opt">;</span> <span class="hl com">/* Local index variables */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"H5Dgather()"</span><span class="hl opt">);</span> <span class="hl com">/* Create dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">3</span><span class="hl opt">,</span> dim<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize src_buf */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">int</span><span class="hl opt">)(</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span>src_buf<span class="hl opt">) /</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>src_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]));</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> j <span class="hl opt">< (</span><span class="hl kwb">int</span><span class="hl opt">)(</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span>src_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]) /</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>src_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">][</span><span class="hl num">0</span><span class="hl opt">]));</span> j<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>k <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> k <span class="hl opt">< (</span><span class="hl kwb">int</span><span class="hl opt">)(</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span>src_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">][</span><span class="hl num">0</span><span class="hl opt">]) /</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>src_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">][</span><span class="hl num">0</span><span class="hl opt">][</span><span class="hl num">0</span><span class="hl opt">]));</span> k<span class="hl opt">++)</span> src_buf<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">][</span>k<span class="hl opt">] =</span> <span class="hl num">1</span> <span class="hl opt">+</span> k <span class="hl opt">+ (</span><span class="hl kwb">int</span><span class="hl opt">)(</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span>src_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">][</span><span class="hl num">0</span><span class="hl opt">]) /</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>src_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">][</span><span class="hl num">0</span><span class="hl opt">][</span><span class="hl num">0</span><span class="hl opt">])) *</span> j <span class="hl opt">+</span> <span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">)(</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span>src_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]) /</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>src_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">][</span><span class="hl num">0</span><span class="hl opt">][</span><span class="hl num">0</span><span class="hl opt">])) *</span> i<span class="hl opt">;</span> <span class="hl com">/*</span> <span class="hl com"> * Test 1: Simple case</span> <span class="hl com"> */</span> <span class="hl com">/* Select hyperslab */</span> count<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> <span class="hl num">8</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> start<span class="hl opt">,</span> NULL<span class="hl opt">,</span> count<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize expect_dst_buf */</span> <span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span><span class="hl kwd">HDmemset</span><span class="hl opt">(</span>expect_dst_buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>expect_dst_buf<span class="hl opt">));</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl num">8</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> expect_dst_buf<span class="hl opt">[</span>i<span class="hl opt">] =</span> src_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">][</span><span class="hl num">0</span><span class="hl opt">][</span>i<span class="hl opt">];</span> <span class="hl com">/* Loop over buffer sizes */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>dst_buf_size <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> dst_buf_size <span class="hl opt"><=</span> <span class="hl num">9</span><span class="hl opt">;</span> dst_buf_size<span class="hl opt">++) {</span> <span class="hl com">/* Reset dst_buf */</span> <span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span><span class="hl kwd">HDmemset</span><span class="hl opt">(</span>dst_buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">));</span> <span class="hl com">/* Initialize gather_info */</span> gather_info<span class="hl opt">.</span>expect_dst_buf <span class="hl opt">=</span> expect_dst_buf<span class="hl opt">;</span> gather_info<span class="hl opt">.</span>max_nelmts <span class="hl opt">=</span> dst_buf_size<span class="hl opt">;</span> gather_info<span class="hl opt">.</span>last_call <span class="hl opt">=</span> FALSE<span class="hl opt">;</span> <span class="hl com">/* Gather data */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dgather</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> src_buf<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> dst_buf_size <span class="hl opt">*</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]),</span> dst_buf<span class="hl opt">,</span> gather_cb<span class="hl opt">,</span> <span class="hl opt">&</span>gather_info<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify that all data has been gathered (and verified) */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>gather_info<span class="hl opt">.</span>expect_dst_buf <span class="hl opt">-</span> expect_dst_buf <span class="hl opt">!=</span> <span class="hl num">8</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/* Test without a callback */</span> <span class="hl com">/* Loop over buffer sizes */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>dst_buf_size <span class="hl opt">=</span> <span class="hl num">8</span><span class="hl opt">;</span> dst_buf_size <span class="hl opt"><=</span> <span class="hl num">9</span><span class="hl opt">;</span> dst_buf_size<span class="hl opt">++) {</span> <span class="hl com">/* Reset dst_buf */</span> <span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span><span class="hl kwd">HDmemset</span><span class="hl opt">(</span>dst_buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">));</span> <span class="hl com">/* Gather data */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dgather</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> src_buf<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> dst_buf_size <span class="hl opt">*</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]),</span> dst_buf<span class="hl opt">,</span> NULL<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify data */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">int</span><span class="hl opt">)(</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">) /</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]));</span> i<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dst_buf<span class="hl opt">[</span>i<span class="hl opt">] !=</span> expect_dst_buf<span class="hl opt">[</span>i<span class="hl opt">])</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/* Test with a dst_buf_size that is not a multiple of the datatype size */</span> <span class="hl com">/* Reset dst_buf */</span> dst_buf_size <span class="hl opt">=</span> <span class="hl num">7</span><span class="hl opt">;</span> <span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span><span class="hl kwd">HDmemset</span><span class="hl opt">(</span>dst_buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">));</span> <span class="hl com">/* Initialize gather_info */</span> gather_info<span class="hl opt">.</span>expect_dst_buf <span class="hl opt">=</span> expect_dst_buf<span class="hl opt">;</span> gather_info<span class="hl opt">.</span>max_nelmts <span class="hl opt">=</span> dst_buf_size <span class="hl opt">-</span> <span class="hl num">1</span><span class="hl opt">;</span> gather_info<span class="hl opt">.</span>last_call <span class="hl opt">=</span> FALSE<span class="hl opt">;</span> <span class="hl com">/* Gather data */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dgather</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> src_buf<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> dst_buf_size <span class="hl opt">*</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]) -</span> <span class="hl num">1</span><span class="hl opt">,</span> dst_buf<span class="hl opt">,</span> gather_cb<span class="hl opt">,</span> <span class="hl opt">&</span>gather_info<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify that all data has been gathered (and verified) */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>gather_info<span class="hl opt">.</span>expect_dst_buf <span class="hl opt">-</span> expect_dst_buf <span class="hl opt">!=</span> <span class="hl num">8</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/*</span> <span class="hl com"> * Test 2: Single block in dataset</span> <span class="hl com"> */</span> <span class="hl com">/* Select hyperslab */</span> start<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">3</span><span class="hl opt">;</span> start<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">2</span><span class="hl opt">;</span> start<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> <span class="hl num">4</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">2</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">3</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> <span class="hl num">2</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> start<span class="hl opt">,</span> NULL<span class="hl opt">,</span> count<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize expect_dst_buf */</span> <span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span><span class="hl kwd">HDmemset</span><span class="hl opt">(</span>expect_dst_buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>expect_dst_buf<span class="hl opt">));</span> dst_i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">3</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl num">5</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">2</span><span class="hl opt">;</span> j <span class="hl opt"><</span> <span class="hl num">5</span><span class="hl opt">;</span> j<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>k <span class="hl opt">=</span> <span class="hl num">4</span><span class="hl opt">;</span> k <span class="hl opt"><</span> <span class="hl num">6</span><span class="hl opt">;</span> k<span class="hl opt">++)</span> expect_dst_buf<span class="hl opt">[</span>dst_i<span class="hl opt">++] =</span> src_buf<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">][</span>k<span class="hl opt">];</span> <span class="hl com">/* Loop over buffer sizes */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>dst_buf_size <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> dst_buf_size <span class="hl opt"><=</span> <span class="hl num">13</span><span class="hl opt">;</span> dst_buf_size<span class="hl opt">++) {</span> <span class="hl com">/* Reset dst_buf */</span> <span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span><span class="hl kwd">HDmemset</span><span class="hl opt">(</span>dst_buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">));</span> <span class="hl com">/* Initialize gather_info */</span> gather_info<span class="hl opt">.</span>expect_dst_buf <span class="hl opt">=</span> expect_dst_buf<span class="hl opt">;</span> gather_info<span class="hl opt">.</span>max_nelmts <span class="hl opt">=</span> dst_buf_size<span class="hl opt">;</span> gather_info<span class="hl opt">.</span>last_call <span class="hl opt">=</span> FALSE<span class="hl opt">;</span> <span class="hl com">/* Gather data */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dgather</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> src_buf<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> dst_buf_size <span class="hl opt">*</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]),</span> dst_buf<span class="hl opt">,</span> gather_cb<span class="hl opt">,</span> <span class="hl opt">&</span>gather_info<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify that all data has been gathered (and verified) */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>gather_info<span class="hl opt">.</span>expect_dst_buf <span class="hl opt">-</span> expect_dst_buf <span class="hl opt">!=</span> <span class="hl num">12</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/*</span> <span class="hl com"> * Test 3: Multiple blocks</span> <span class="hl com"> */</span> <span class="hl com">/* Select hyperslab */</span> start<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> start<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> start<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> stride<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">3</span><span class="hl opt">;</span> stride<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">4</span><span class="hl opt">;</span> stride<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> <span class="hl num">5</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">3</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> <span class="hl num">2</span><span class="hl opt">;</span> block<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> block<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">3</span><span class="hl opt">;</span> block<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> <span class="hl num">2</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> start<span class="hl opt">,</span> stride<span class="hl opt">,</span> count<span class="hl opt">,</span> block<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize expect_dst_buf */</span> <span class="hl com">/* Iterate over block containing selection, checking if each element is in</span> <span class="hl com"> * selection. Note that the algorithm used here (if statement) would not</span> <span class="hl com"> * work for overlapping hyperslabs. */</span> <span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span><span class="hl kwd">HDmemset</span><span class="hl opt">(</span>expect_dst_buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>expect_dst_buf<span class="hl opt">));</span> dst_i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl num">8</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> j <span class="hl opt"><</span> <span class="hl num">4</span><span class="hl opt">;</span> j<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>k <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> k <span class="hl opt"><</span> <span class="hl num">8</span><span class="hl opt">;</span> k<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>hsize_t<span class="hl opt">)</span>i <span class="hl opt">>=</span> start<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] && ((</span>hsize_t<span class="hl opt">)</span>i <span class="hl opt">-</span> start<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]) %</span> stride<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] <</span> block<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] &&</span> <span class="hl opt">((</span>hsize_t<span class="hl opt">)</span>i <span class="hl opt">-</span> start<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]) /</span> stride<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] <</span> count<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] && (</span>hsize_t<span class="hl opt">)</span>j <span class="hl opt">>=</span> start<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] &&</span> <span class="hl opt">((</span>hsize_t<span class="hl opt">)</span>j <span class="hl opt">-</span> start<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]) %</span> stride<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] <</span> block<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] &&</span> <span class="hl opt">((</span>hsize_t<span class="hl opt">)</span>j <span class="hl opt">-</span> start<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]) /</span> stride<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] <</span> count<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] && (</span>hsize_t<span class="hl opt">)</span>k <span class="hl opt">>=</span> start<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] &&</span> <span class="hl opt">((</span>hsize_t<span class="hl opt">)</span>k <span class="hl opt">-</span> start<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">]) %</span> stride<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] <</span> block<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] &&</span> <span class="hl opt">((</span>hsize_t<span class="hl opt">)</span>k <span class="hl opt">-</span> start<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">]) /</span> stride<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] <</span> count<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">])</span> expect_dst_buf<span class="hl opt">[</span>dst_i<span class="hl opt">++] =</span> src_buf<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">][</span>k<span class="hl opt">];</span> <span class="hl com">/* Loop over buffer sizes */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>dst_buf_size <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> dst_buf_size <span class="hl opt"><=</span> <span class="hl num">37</span><span class="hl opt">;</span> dst_buf_size<span class="hl opt">++) {</span> <span class="hl com">/* Reset dst_buf */</span> <span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span><span class="hl kwd">HDmemset</span><span class="hl opt">(</span>dst_buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">));</span> <span class="hl com">/* Initialize gather_info */</span> gather_info<span class="hl opt">.</span>expect_dst_buf <span class="hl opt">=</span> expect_dst_buf<span class="hl opt">;</span> gather_info<span class="hl opt">.</span>max_nelmts <span class="hl opt">=</span> dst_buf_size<span class="hl opt">;</span> gather_info<span class="hl opt">.</span>last_call <span class="hl opt">=</span> FALSE<span class="hl opt">;</span> <span class="hl com">/* Gather data */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dgather</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> src_buf<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> dst_buf_size <span class="hl opt">*</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]),</span> dst_buf<span class="hl opt">,</span> gather_cb<span class="hl opt">,</span> <span class="hl opt">&</span>gather_info<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify that all data has been gathered (and verified) */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>gather_info<span class="hl opt">.</span>expect_dst_buf <span class="hl opt">-</span> expect_dst_buf <span class="hl opt">!=</span> <span class="hl num">36</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/*</span> <span class="hl com"> * Test 4: Compound selection</span> <span class="hl com"> */</span> <span class="hl com">/* Select hyperslabs */</span> start<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">2</span><span class="hl opt">;</span> start<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> start<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">2</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">3</span><span class="hl opt">;</span> count<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> <span class="hl num">2</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> start<span class="hl opt">,</span> NULL<span class="hl opt">,</span> count<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> start2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">1</span><span class="hl opt">;</span> start2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">2</span><span class="hl opt">;</span> start2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> <span class="hl num">2</span><span class="hl opt">;</span> count2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] =</span> <span class="hl num">3</span><span class="hl opt">;</span> count2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] =</span> <span class="hl num">2</span><span class="hl opt">;</span> count2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] =</span> <span class="hl num">2</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_XOR<span class="hl opt">,</span> start2<span class="hl opt">,</span> NULL<span class="hl opt">,</span> count2<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize expect_dst_buf */</span> <span class="hl com">/* Iterate over block containing selection, checking if each element is in</span> <span class="hl com"> * selection. */</span> <span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span><span class="hl kwd">HDmemset</span><span class="hl opt">(</span>expect_dst_buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>expect_dst_buf<span class="hl opt">));</span> dst_i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl num">4</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>j <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> j <span class="hl opt"><</span> <span class="hl num">4</span><span class="hl opt">;</span> j<span class="hl opt">++)</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>k <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> k <span class="hl opt"><</span> <span class="hl num">4</span><span class="hl opt">;</span> k<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(!(((</span>hsize_t<span class="hl opt">)</span>i <span class="hl opt">>=</span> start<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] && (</span>hsize_t<span class="hl opt">)</span>i <span class="hl opt"><</span> start<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] +</span> count<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]) &&</span> <span class="hl opt">((</span>hsize_t<span class="hl opt">)</span>j <span class="hl opt">>=</span> start<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] && (</span>hsize_t<span class="hl opt">)</span>j <span class="hl opt"><</span> start<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] +</span> count<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]) &&</span> <span class="hl opt">((</span>hsize_t<span class="hl opt">)</span>k <span class="hl opt">>=</span> start<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] && (</span>hsize_t<span class="hl opt">)</span>k <span class="hl opt"><</span> start<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] +</span> count<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">])) !=</span> <span class="hl opt">!(((</span>hsize_t<span class="hl opt">)</span>i <span class="hl opt">>=</span> start2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] && (</span>hsize_t<span class="hl opt">)</span>i <span class="hl opt"><</span> start2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] +</span> count2<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]) &&</span> <span class="hl opt">((</span>hsize_t<span class="hl opt">)</span>j <span class="hl opt">>=</span> start2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] && (</span>hsize_t<span class="hl opt">)</span>j <span class="hl opt"><</span> start2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] +</span> count2<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]) &&</span> <span class="hl opt">((</span>hsize_t<span class="hl opt">)</span>k <span class="hl opt">>=</span> start2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] && (</span>hsize_t<span class="hl opt">)</span>k <span class="hl opt"><</span> start2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">] +</span> count2<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">])))</span> expect_dst_buf<span class="hl opt">[</span>dst_i<span class="hl opt">++] =</span> src_buf<span class="hl opt">[</span>i<span class="hl opt">][</span>j<span class="hl opt">][</span>k<span class="hl opt">];</span> <span class="hl com">/* Loop over buffer sizes */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>dst_buf_size <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> dst_buf_size <span class="hl opt"><=</span> <span class="hl num">17</span><span class="hl opt">;</span> dst_buf_size<span class="hl opt">++) {</span> <span class="hl com">/* Reset dst_buf */</span> <span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span><span class="hl kwd">HDmemset</span><span class="hl opt">(</span>dst_buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">));</span> <span class="hl com">/* Initialize gather_info */</span> gather_info<span class="hl opt">.</span>expect_dst_buf <span class="hl opt">=</span> expect_dst_buf<span class="hl opt">;</span> gather_info<span class="hl opt">.</span>max_nelmts <span class="hl opt">=</span> dst_buf_size<span class="hl opt">;</span> gather_info<span class="hl opt">.</span>last_call <span class="hl opt">=</span> FALSE<span class="hl opt">;</span> <span class="hl com">/* Gather data */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dgather</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> src_buf<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> dst_buf_size <span class="hl opt">*</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]),</span> dst_buf<span class="hl opt">,</span> gather_cb<span class="hl opt">,</span> <span class="hl opt">&</span>gather_info<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify that all data has been gathered (and verified) */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>gather_info<span class="hl opt">.</span>expect_dst_buf <span class="hl opt">-</span> expect_dst_buf <span class="hl opt">!=</span> <span class="hl num">16</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/*</span> <span class="hl com"> * Test 5: Point selection</span> <span class="hl com"> */</span> <span class="hl com">/* Select hyperslabs */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_elements</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>point<span class="hl opt">) /</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>point<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]), (</span>hsize_t <span class="hl opt">*)</span>point<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize expect_dst_buf */</span> <span class="hl com">/* Iterate over block containing selection, checking if each element is in</span> <span class="hl com"> * selection. */</span> <span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span><span class="hl kwd">HDmemset</span><span class="hl opt">(</span>expect_dst_buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>expect_dst_buf<span class="hl opt">));</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">int</span><span class="hl opt">)(</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span>point<span class="hl opt">) /</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>point<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]));</span> i<span class="hl opt">++)</span> expect_dst_buf<span class="hl opt">[</span>i<span class="hl opt">] =</span> src_buf<span class="hl opt">[</span>point<span class="hl opt">[</span>i<span class="hl opt">][</span><span class="hl num">0</span><span class="hl opt">]][</span>point<span class="hl opt">[</span>i<span class="hl opt">][</span><span class="hl num">1</span><span class="hl opt">]][</span>point<span class="hl opt">[</span>i<span class="hl opt">][</span><span class="hl num">2</span><span class="hl opt">]];</span> <span class="hl com">/* Loop over buffer sizes */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>dst_buf_size <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> dst_buf_size <span class="hl opt"><=</span> <span class="hl num">5</span><span class="hl opt">;</span> dst_buf_size<span class="hl opt">++) {</span> <span class="hl com">/* Reset dst_buf */</span> <span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span><span class="hl kwd">HDmemset</span><span class="hl opt">(</span>dst_buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">));</span> <span class="hl com">/* Initialize gather_info */</span> gather_info<span class="hl opt">.</span>expect_dst_buf <span class="hl opt">=</span> expect_dst_buf<span class="hl opt">;</span> gather_info<span class="hl opt">.</span>max_nelmts <span class="hl opt">=</span> dst_buf_size<span class="hl opt">;</span> gather_info<span class="hl opt">.</span>last_call <span class="hl opt">=</span> FALSE<span class="hl opt">;</span> <span class="hl com">/* Gather data */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dgather</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> src_buf<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> dst_buf_size <span class="hl opt">*</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]),</span> dst_buf<span class="hl opt">,</span> gather_cb<span class="hl opt">,</span> <span class="hl opt">&</span>gather_info<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify that all data has been gathered (and verified) */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>gather_info<span class="hl opt">.</span>expect_dst_buf <span class="hl opt">-</span> expect_dst_buf <span class="hl opt">!=</span> <span class="hl num">4</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/* Close everything */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_gather() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_scatter_error</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests H5Dscatter with a variety of different conditions</span> <span class="hl com"> * that should cause errors.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Neil Fortner</span> <span class="hl com"> * Monday, February 4, 2013</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">scatter_error_cb_fail</span><span class="hl opt">(</span><span class="hl kwb">void</span> <span class="hl opt">**</span>src_buf <span class="hl com">/*out*/</span><span class="hl opt">,</span> <span class="hl kwb">size_t</span> <span class="hl opt">*</span>src_buf_bytes_used <span class="hl com">/*out*/</span><span class="hl opt">,</span> <span class="hl kwb">void</span> <span class="hl opt">*</span>_scatter_info<span class="hl opt">)</span> <span class="hl opt">{</span> scatter_info_t <span class="hl opt">*</span>scatter_info <span class="hl opt">= (</span>scatter_info_t <span class="hl opt">*)</span>_scatter_info<span class="hl opt">;</span> <span class="hl kwb">size_t</span> nelmts<span class="hl opt">;</span> <span class="hl com">/* Number of elements to return in src_buf */</span> <span class="hl com">/* Calculate number of elements */</span> nelmts <span class="hl opt">=</span> <span class="hl kwd">MIN</span><span class="hl opt">(</span>scatter_info<span class="hl opt">-></span>block<span class="hl opt">,</span> scatter_info<span class="hl opt">-></span>size<span class="hl opt">);</span> <span class="hl kwd">HDassert</span><span class="hl opt">(</span>nelmts <span class="hl opt">></span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl com">/* Set output variables */</span> <span class="hl opt">*</span>src_buf <span class="hl opt">= (</span><span class="hl kwb">void</span> <span class="hl opt">*)</span>scatter_info<span class="hl opt">-></span>src_buf<span class="hl opt">;</span> <span class="hl opt">*</span>src_buf_bytes_used <span class="hl opt">=</span> nelmts <span class="hl opt">*</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>scatter_info<span class="hl opt">-></span>src_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]);</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end scatter_error_cb_fail() */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">scatter_error_cb_null</span><span class="hl opt">(</span><span class="hl kwb">void</span> <span class="hl opt">**</span>src_buf <span class="hl com">/*out*/</span><span class="hl opt">,</span> <span class="hl kwb">size_t</span> <span class="hl opt">*</span>src_buf_bytes_used <span class="hl com">/*out*/</span><span class="hl opt">,</span> <span class="hl kwb">void</span> <span class="hl opt">*</span>_scatter_info<span class="hl opt">)</span> <span class="hl opt">{</span> scatter_info_t <span class="hl opt">*</span>scatter_info <span class="hl opt">= (</span>scatter_info_t <span class="hl opt">*)</span>_scatter_info<span class="hl opt">;</span> <span class="hl kwb">size_t</span> nelmts<span class="hl opt">;</span> <span class="hl com">/* Number of elements to return in src_buf */</span> <span class="hl com">/* Calculate number of elements */</span> nelmts <span class="hl opt">=</span> <span class="hl kwd">MIN</span><span class="hl opt">(</span>scatter_info<span class="hl opt">-></span>block<span class="hl opt">,</span> scatter_info<span class="hl opt">-></span>size<span class="hl opt">);</span> <span class="hl kwd">HDassert</span><span class="hl opt">(</span>nelmts <span class="hl opt">></span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl com">/* Set output variables */</span> <span class="hl opt">*</span>src_buf <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl opt">*</span>src_buf_bytes_used <span class="hl opt">=</span> nelmts <span class="hl opt">*</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>scatter_info<span class="hl opt">-></span>src_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]);</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end scatter_error_cb_null() */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">scatter_error_cb_unalign</span><span class="hl opt">(</span><span class="hl kwb">void</span> <span class="hl opt">**</span>src_buf <span class="hl com">/*out*/</span><span class="hl opt">,</span> <span class="hl kwb">size_t</span> <span class="hl opt">*</span>src_buf_bytes_used <span class="hl com">/*out*/</span><span class="hl opt">,</span> <span class="hl kwb">void</span> <span class="hl opt">*</span>_src_buf_bytes_used<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl com">/* Set output variables */</span> <span class="hl opt">*</span>src_buf <span class="hl opt">=</span> _src_buf_bytes_used<span class="hl opt">;</span> <span class="hl opt">*</span>src_buf_bytes_used <span class="hl opt">= *(</span><span class="hl kwb">size_t</span> <span class="hl opt">*)</span>_src_buf_bytes_used<span class="hl opt">;</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* endscatter_error_cb_unalign() */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_scatter_error</span><span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span> <span class="hl opt">{</span> hid_t sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataspace ID */</span> hsize_t dim<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span><span class="hl num">10</span><span class="hl opt">};</span> <span class="hl com">/* Dataspace dimensions */</span> hsize_t start<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">};</span> hsize_t count<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">] = {</span><span class="hl num">6</span><span class="hl opt">};</span> <span class="hl kwb">int</span> src_buf<span class="hl opt">[</span><span class="hl num">7</span><span class="hl opt">];</span> <span class="hl com">/* Source data buffer */</span> <span class="hl kwb">int</span> dst_buf<span class="hl opt">[</span><span class="hl num">10</span><span class="hl opt">];</span> <span class="hl com">/* Destination data buffer */</span> scatter_info_t scatter_info<span class="hl opt">;</span> <span class="hl com">/* Operator data for callback */</span> <span class="hl kwb">size_t</span> cb_unalign_nbytes<span class="hl opt">;</span> <span class="hl com">/* Number of bytes to return for unaligned test */</span> herr_t ret<span class="hl opt">;</span> <span class="hl com">/* Return value */</span> <span class="hl kwb">int</span> i<span class="hl opt">;</span> <span class="hl com">/* Local index variable */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"H5Dscatter() error conditions"</span><span class="hl opt">);</span> <span class="hl com">/* Create dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> dim<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize src_buf */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">int</span><span class="hl opt">)(</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span>src_buf<span class="hl opt">) /</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>src_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]));</span> i<span class="hl opt">++)</span> src_buf<span class="hl opt">[</span>i<span class="hl opt">] =</span> i <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Select hyperslab */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> start<span class="hl opt">,</span> NULL<span class="hl opt">,</span> count<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify that base configuration passes */</span> scatter_info<span class="hl opt">.</span>src_buf <span class="hl opt">=</span> src_buf<span class="hl opt">;</span> scatter_info<span class="hl opt">.</span>block <span class="hl opt">=</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>src_buf<span class="hl opt">) /</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>src_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]);</span> scatter_info<span class="hl opt">.</span>size <span class="hl opt">=</span> <span class="hl num">6</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dscatter</span><span class="hl opt">((</span>H5D_scatter_func_t<span class="hl opt">)</span>scatter_cb<span class="hl opt">, &</span>scatter_info<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> dst_buf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/*</span> <span class="hl com"> * Test invalid parameters</span> <span class="hl com"> */</span> scatter_info<span class="hl opt">.</span>src_buf <span class="hl opt">=</span> src_buf<span class="hl opt">;</span> scatter_info<span class="hl opt">.</span>size <span class="hl opt">=</span> <span class="hl num">6</span><span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Dscatter</span><span class="hl opt">(</span>NULL<span class="hl opt">,</span> NULL<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> dst_buf<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> scatter_info<span class="hl opt">.</span>src_buf <span class="hl opt">=</span> src_buf<span class="hl opt">;</span> scatter_info<span class="hl opt">.</span>size <span class="hl opt">=</span> <span class="hl num">6</span><span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Dscatter</span><span class="hl opt">((</span>H5D_scatter_func_t<span class="hl opt">)</span>scatter_cb<span class="hl opt">, &</span>scatter_info<span class="hl opt">,</span> sid<span class="hl opt">,</span> sid<span class="hl opt">,</span> dst_buf<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> scatter_info<span class="hl opt">.</span>src_buf <span class="hl opt">=</span> src_buf<span class="hl opt">;</span> scatter_info<span class="hl opt">.</span>size <span class="hl opt">=</span> <span class="hl num">6</span><span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Dscatter</span><span class="hl opt">((</span>H5D_scatter_func_t<span class="hl opt">)</span>scatter_cb<span class="hl opt">, &</span>scatter_info<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> dst_buf<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> scatter_info<span class="hl opt">.</span>src_buf <span class="hl opt">=</span> src_buf<span class="hl opt">;</span> scatter_info<span class="hl opt">.</span>size <span class="hl opt">=</span> <span class="hl num">6</span><span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Dscatter</span><span class="hl opt">((</span>H5D_scatter_func_t<span class="hl opt">)</span>scatter_cb<span class="hl opt">, &</span>scatter_info<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> NULL<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/*</span> <span class="hl com"> * Test returning too many elements in callback</span> <span class="hl com"> */</span> scatter_info<span class="hl opt">.</span>src_buf <span class="hl opt">=</span> src_buf<span class="hl opt">;</span> scatter_info<span class="hl opt">.</span>size <span class="hl opt">=</span> <span class="hl num">7</span><span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Dscatter</span><span class="hl opt">((</span>H5D_scatter_func_t<span class="hl opt">)</span>scatter_cb<span class="hl opt">, &</span>scatter_info<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> dst_buf<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/*</span> <span class="hl com"> * Test callback returns failure</span> <span class="hl com"> */</span> scatter_info<span class="hl opt">.</span>src_buf <span class="hl opt">=</span> src_buf<span class="hl opt">;</span> scatter_info<span class="hl opt">.</span>size <span class="hl opt">=</span> <span class="hl num">6</span><span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Dscatter</span><span class="hl opt">((</span>H5D_scatter_func_t<span class="hl opt">)</span>scatter_error_cb_fail<span class="hl opt">, &</span>scatter_info<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> dst_buf<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/*</span> <span class="hl com"> * Test callback returns NULL buffer</span> <span class="hl com"> */</span> scatter_info<span class="hl opt">.</span>src_buf <span class="hl opt">=</span> src_buf<span class="hl opt">;</span> scatter_info<span class="hl opt">.</span>size <span class="hl opt">=</span> <span class="hl num">6</span><span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Dscatter</span><span class="hl opt">((</span>H5D_scatter_func_t<span class="hl opt">)</span>scatter_error_cb_null<span class="hl opt">, &</span>scatter_info<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> dst_buf<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/*</span> <span class="hl com"> * Test callback returns 0 for src_buf_bytes_used</span> <span class="hl com"> */</span> cb_unalign_nbytes <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Dscatter</span><span class="hl opt">((</span>H5D_scatter_func_t<span class="hl opt">)</span>scatter_error_cb_unalign<span class="hl opt">, &</span>cb_unalign_nbytes<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> dst_buf<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/*</span> <span class="hl com"> * Test callback returns src_buf_bytes_used that is not a multiple of</span> <span class="hl com"> * datatype size</span> <span class="hl com"> */</span> cb_unalign_nbytes <span class="hl opt">=</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>src_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]) -</span> <span class="hl num">1</span><span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Dscatter</span><span class="hl opt">((</span>H5D_scatter_func_t<span class="hl opt">)</span>scatter_error_cb_unalign<span class="hl opt">, &</span>cb_unalign_nbytes<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> dst_buf<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> cb_unalign_nbytes <span class="hl opt">=</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>src_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]) +</span> <span class="hl num">1</span><span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Dscatter</span><span class="hl opt">((</span>H5D_scatter_func_t<span class="hl opt">)</span>scatter_error_cb_unalign<span class="hl opt">, &</span>cb_unalign_nbytes<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> dst_buf<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close everything */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_scatter_error() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_gather_error</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests H5Dgather with a variety of different conditions</span> <span class="hl com"> * that should cause errors.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Neil Fortner</span> <span class="hl com"> * Monday, February 4, 2013</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">gather_error_cb_fail</span><span class="hl opt">(</span><span class="hl kwb">const void</span> H5_ATTR_UNUSED <span class="hl opt">*</span>dst_buf<span class="hl opt">,</span> <span class="hl kwb">size_t</span> H5_ATTR_UNUSED dst_buf_bytes_used<span class="hl opt">,</span> <span class="hl kwb">void</span> H5_ATTR_UNUSED <span class="hl opt">*</span>op_data<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end gather_error_cb_fail() */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_gather_error</span><span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span> <span class="hl opt">{</span> hid_t sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataspace ID */</span> hsize_t dim<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span><span class="hl num">10</span><span class="hl opt">};</span> <span class="hl com">/* Dataspace dimensions */</span> hsize_t start<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span><span class="hl num">2</span><span class="hl opt">};</span> hsize_t count<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span><span class="hl num">6</span><span class="hl opt">};</span> <span class="hl kwb">int</span> src_buf<span class="hl opt">[</span><span class="hl num">10</span><span class="hl opt">];</span> <span class="hl com">/* Source data buffer */</span> <span class="hl kwb">int</span> dst_buf<span class="hl opt">[</span><span class="hl num">6</span><span class="hl opt">];</span> <span class="hl com">/* Destination data buffer */</span> <span class="hl kwb">int</span> expect_dst_buf<span class="hl opt">[</span><span class="hl num">6</span><span class="hl opt">];</span> <span class="hl com">/* Expected destination data buffer */</span> gather_info_t gather_info<span class="hl opt">;</span> <span class="hl com">/* Operator data for callback */</span> herr_t ret<span class="hl opt">;</span> <span class="hl com">/* Return value */</span> <span class="hl kwb">int</span> i<span class="hl opt">;</span> <span class="hl com">/* Local index variable */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"H5Dgather() error conditions"</span><span class="hl opt">);</span> <span class="hl com">/* Create dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> dim<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize src_buf */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt">< (</span><span class="hl kwb">int</span><span class="hl opt">)(</span><span class="hl kwa">sizeof</span><span class="hl opt">(</span>src_buf<span class="hl opt">) /</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>src_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]));</span> i<span class="hl opt">++)</span> src_buf<span class="hl opt">[</span>i<span class="hl opt">] =</span> <span class="hl num">1</span> <span class="hl opt">+</span> i<span class="hl opt">;</span> <span class="hl com">/* Select hyperslab */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> start<span class="hl opt">,</span> NULL<span class="hl opt">,</span> count<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize expect_dst_buf */</span> <span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span><span class="hl kwd">HDmemset</span><span class="hl opt">(</span>expect_dst_buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>expect_dst_buf<span class="hl opt">));</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl num">6</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> expect_dst_buf<span class="hl opt">[</span>i<span class="hl opt">] =</span> src_buf<span class="hl opt">[</span>i <span class="hl opt">+</span> <span class="hl num">2</span><span class="hl opt">];</span> <span class="hl com">/* Verify that base configuration passes */</span> gather_info<span class="hl opt">.</span>expect_dst_buf <span class="hl opt">=</span> expect_dst_buf<span class="hl opt">;</span> gather_info<span class="hl opt">.</span>max_nelmts <span class="hl opt">=</span> <span class="hl num">6</span><span class="hl opt">;</span> gather_info<span class="hl opt">.</span>last_call <span class="hl opt">=</span> FALSE<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dgather</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> src_buf<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> <span class="hl num">6</span> <span class="hl opt">*</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]),</span> dst_buf<span class="hl opt">,</span> gather_cb<span class="hl opt">, &</span>gather_info<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/*</span> <span class="hl com"> * Test invalid parameters</span> <span class="hl com"> */</span> gather_info<span class="hl opt">.</span>expect_dst_buf <span class="hl opt">=</span> expect_dst_buf<span class="hl opt">;</span> gather_info<span class="hl opt">.</span>last_call <span class="hl opt">=</span> FALSE<span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Dgather</span><span class="hl opt">(</span>H5T_NATIVE_INT<span class="hl opt">,</span> src_buf<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> <span class="hl num">6</span> <span class="hl opt">*</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]),</span> dst_buf<span class="hl opt">,</span> gather_cb<span class="hl opt">,</span> <span class="hl opt">&</span>gather_info<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> gather_info<span class="hl opt">.</span>expect_dst_buf <span class="hl opt">=</span> expect_dst_buf<span class="hl opt">;</span> gather_info<span class="hl opt">.</span>last_call <span class="hl opt">=</span> FALSE<span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Dgather</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> NULL<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> <span class="hl num">6</span> <span class="hl opt">*</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]),</span> dst_buf<span class="hl opt">,</span> gather_cb<span class="hl opt">, &</span>gather_info<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> gather_info<span class="hl opt">.</span>expect_dst_buf <span class="hl opt">=</span> expect_dst_buf<span class="hl opt">;</span> gather_info<span class="hl opt">.</span>last_call <span class="hl opt">=</span> FALSE<span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Dgather</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> src_buf<span class="hl opt">,</span> sid<span class="hl opt">,</span> <span class="hl num">6</span> <span class="hl opt">*</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]),</span> dst_buf<span class="hl opt">,</span> gather_cb<span class="hl opt">, &</span>gather_info<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> gather_info<span class="hl opt">.</span>expect_dst_buf <span class="hl opt">=</span> expect_dst_buf<span class="hl opt">;</span> gather_info<span class="hl opt">.</span>last_call <span class="hl opt">=</span> FALSE<span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Dgather</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> src_buf<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> dst_buf<span class="hl opt">,</span> gather_cb<span class="hl opt">, &</span>gather_info<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> gather_info<span class="hl opt">.</span>expect_dst_buf <span class="hl opt">=</span> expect_dst_buf<span class="hl opt">;</span> gather_info<span class="hl opt">.</span>last_call <span class="hl opt">=</span> FALSE<span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Dgather</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> src_buf<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> dst_buf<span class="hl opt">,</span> gather_cb<span class="hl opt">, &</span>gather_info<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> gather_info<span class="hl opt">.</span>expect_dst_buf <span class="hl opt">=</span> expect_dst_buf<span class="hl opt">;</span> gather_info<span class="hl opt">.</span>last_call <span class="hl opt">=</span> FALSE<span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Dgather</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> src_buf<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> <span class="hl num">6</span> <span class="hl opt">*</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]),</span> NULL<span class="hl opt">,</span> gather_cb<span class="hl opt">, &</span>gather_info<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> gather_info<span class="hl opt">.</span>expect_dst_buf <span class="hl opt">=</span> expect_dst_buf<span class="hl opt">;</span> gather_info<span class="hl opt">.</span>last_call <span class="hl opt">=</span> FALSE<span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Dgather</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> src_buf<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> <span class="hl num">5</span> <span class="hl opt">*</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]),</span> dst_buf<span class="hl opt">,</span> NULL<span class="hl opt">, &</span>gather_info<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/*</span> <span class="hl com"> * Test callback returns failure</span> <span class="hl com"> */</span> gather_info<span class="hl opt">.</span>expect_dst_buf <span class="hl opt">=</span> expect_dst_buf<span class="hl opt">;</span> gather_info<span class="hl opt">.</span>last_call <span class="hl opt">=</span> FALSE<span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Dgather</span><span class="hl opt">(</span>sid<span class="hl opt">,</span> src_buf<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> <span class="hl num">6</span> <span class="hl opt">*</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dst_buf<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]),</span> dst_buf<span class="hl opt">,</span> gather_error_cb_fail<span class="hl opt">,</span> NULL<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">>=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close everything */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_gather_error() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * DLS bug -- HDFFV-9672</span> <span class="hl com"> *</span> <span class="hl com"> * The following functions replicate the test code provided by DLS to</span> <span class="hl com"> * expose bug hdffv-9672. All functions associated with this test</span> <span class="hl com"> * have the prefix DLS_01_</span> <span class="hl com"> *</span> <span class="hl com"> * The note documenting the bug is reproduced below:</span> <span class="hl com"> *</span> <span class="hl com"> * ------------------------------------------------------</span> <span class="hl com"> *</span> <span class="hl com"> * Hi,</span> <span class="hl com"> * We've found an issue regarding fixed length strings.</span> <span class="hl com"> *</span> <span class="hl com"> * If we create a chunked dataset of large fixed length strings</span> <span class="hl com"> * (up to 1kb per string) with small chunk sizes (~8 elements per</span> <span class="hl com"> * chunk) then the resulting dataset may not be read later.</span> <span class="hl com"> * This only happens if the file is created with LIBVER_LATEST</span> <span class="hl com"> * for the version bounds.</span> <span class="hl com"> *</span> <span class="hl com"> * Calling H5Oget_info(...) on the dataset results in the following:</span> <span class="hl com"> *</span> <span class="hl com"> * H5Dearray.c:250: H5D__earray_crt_context: Assertion</span> <span class="hl com"> * `udata->chunk_size > 0' failed.</span> <span class="hl com"> *</span> <span class="hl com"> * Example:</span> <span class="hl com"> * void create_data(...)</span> <span class="hl com"> * {</span> <span class="hl com"> * ...</span> <span class="hl com"> *</span> <span class="hl com"> * hsize_t chunks[1] = {8} ;</span> <span class="hl com"> *</span> <span class="hl com"> * err = H5Tset_size( tid, 256 );</span> <span class="hl com"> *</span> <span class="hl com"> * err = H5Pset_chunk( dcpl, 1, chunks );</span> <span class="hl com"> *</span> <span class="hl com"> * H5Dcreate2( fid, "data", tid, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT );</span> <span class="hl com"> *</span> <span class="hl com"> * // write data</span> <span class="hl com"> * }</span> <span class="hl com"> *</span> <span class="hl com"> * void read_data(...)</span> <span class="hl com"> * {</span> <span class="hl com"> * ...</span> <span class="hl com"> *</span> <span class="hl com"> * H5O_into_t info; status = H5Oget_info( did, &info ) // crash</span> <span class="hl com"> * ...</span> <span class="hl com"> * }</span> <span class="hl com"> *</span> <span class="hl com"> * If the size of the chunk is increased (usually matching the</span> <span class="hl com"> * string length) then this problem disappears.</span> <span class="hl com"> *</span> <span class="hl com"> * A full program that produces such a file (and crashes trying to</span> <span class="hl com"> * read it) is attached.</span> <span class="hl com"> *</span> <span class="hl com"> * Tested with 1.10.0-alpha1.</span> <span class="hl com"> *</span> <span class="hl com"> * Regards,</span> <span class="hl com"> *</span> <span class="hl com"> * Charles Mita</span> <span class="hl com"> * Software Engineer</span> <span class="hl com"> * Diamond Light Source Ltd.</span> <span class="hl com"> * +44 1235 778029</span> <span class="hl com"> *</span> <span class="hl com"> * ------------------------------------------------------</span> <span class="hl com"> *</span> <span class="hl com"> * The bug in question turned out to be caused by a failure to update</span> <span class="hl com"> * the enc_bytes_per_dim field in the layout if the size of the</span> <span class="hl com"> * underlying type required more bytes to encode than any of the</span> <span class="hl com"> * chunk dimensions.</span> <span class="hl com"> *</span> <span class="hl com"> * At least in debug builds, the following test code exposes the</span> <span class="hl com"> * failure via an assertion failure.</span> <span class="hl com"> *</span> <span class="hl com"> * Note that the test code make no attempt to run with different</span> <span class="hl com"> * file drivers, as the bug is in the actual on disk encoding of</span> <span class="hl com"> * the chunk layout.</span> <span class="hl com"> *</span> <span class="hl com"> * JRM -- 2/5/16</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl ppc">#define DLS_01_DATASET</span> <span class="hl pps">"data"</span><span class="hl ppc"></span> <span class="hl ppc">#define DLS_01_STR_SIZE 256</span> <span class="hl ppc">#define DLS_01_CHUNK_SIZE 8</span> <span class="hl ppc">#define DLS_01_DIMS 4</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">dls_01_setup_file</span><span class="hl opt">(</span>hid_t fid<span class="hl opt">);</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">dls_01_write_data</span><span class="hl opt">(</span>hid_t fid<span class="hl opt">,</span> <span class="hl kwb">char</span> <span class="hl opt">*</span>buffer<span class="hl opt">);</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">dls_01_read_stuff</span><span class="hl opt">(</span>hid_t fid<span class="hl opt">);</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">dls_01_main</span><span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">);</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">dls_01_setup_file</span><span class="hl opt">(</span>hid_t fid<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">int</span> status <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> hid_t sid <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">,</span> did <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">,</span> tid <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">,</span> dcpl <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwb">int</span> ndims <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> hsize_t max_shape<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span>H5S_UNLIMITED<span class="hl opt">};</span> hsize_t initial_shape<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span><span class="hl num">0</span><span class="hl opt">};</span> hsize_t chunks<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span>DLS_01_CHUNK_SIZE<span class="hl opt">};</span> sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span>ndims<span class="hl opt">,</span> initial_shape<span class="hl opt">,</span> max_shape<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>sid <span class="hl opt"><=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> tid <span class="hl opt">=</span> <span class="hl kwd">H5Tcopy</span><span class="hl opt">(</span>H5T_C_S1<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>tid <span class="hl opt"><=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Tset_size</span><span class="hl opt">(</span>tid<span class="hl opt">,</span> DLS_01_STR_SIZE<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dcpl <span class="hl opt"><=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> ndims<span class="hl opt">,</span> chunks<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> did <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DLS_01_DATASET<span class="hl opt">,</span> tid<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>did <span class="hl opt"><=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>tid<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end dls_01_setup_file() */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">dls_01_write_data</span><span class="hl opt">(</span>hid_t fid<span class="hl opt">,</span> <span class="hl kwb">char</span> <span class="hl opt">*</span>buffer<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">int</span> status <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> hid_t did <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">,</span> tid <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> hsize_t extent<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span><span class="hl num">4</span><span class="hl opt">};</span> did <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DLS_01_DATASET<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>did <span class="hl opt"><=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> tid <span class="hl opt">=</span> <span class="hl kwd">H5Dget_type</span><span class="hl opt">(</span>did<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>tid <span class="hl opt"><=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Dset_extent</span><span class="hl opt">(</span>did<span class="hl opt">,</span> extent<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>did<span class="hl opt">,</span> tid<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> buffer<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Fflush</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> H5F_SCOPE_LOCAL<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Tclose</span><span class="hl opt">(</span>tid<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end dls_01_write_data() */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">dls_01_read_stuff</span><span class="hl opt">(</span>hid_t fid<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">int</span> status <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> hid_t did <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> H5O_info2_t info<span class="hl opt">;</span> did <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DLS_01_DATASET<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>did <span class="hl opt"><=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Oget_info3</span><span class="hl opt">(</span>did<span class="hl opt">, &</span>info<span class="hl opt">,</span> H5O_INFO_BASIC<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end dls_01_read_stuff() */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">dls_01_main</span><span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span><span class="hl num">512</span><span class="hl opt">];</span> <span class="hl kwb">int</span> status <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> hid_t fapl <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">,</span> fid <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwb">const char</span> <span class="hl opt">*</span>strings<span class="hl opt">[</span>DLS_01_DIMS<span class="hl opt">] = {</span><span class="hl str">"String 1"</span><span class="hl opt">,</span> <span class="hl str">"Test string 2"</span><span class="hl opt">,</span> <span class="hl str">"Another string"</span><span class="hl opt">,</span> <span class="hl str">"Final String"</span><span class="hl opt">};</span> <span class="hl kwb">char</span> <span class="hl opt">*</span> buffer <span class="hl opt">=</span> NULL<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"Testing DLS bugfix 1"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">==</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">23</span><span class="hl opt">],</span> H5P_DEFAULT<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>filename<span class="hl opt">)))</span> TEST_ERROR<span class="hl opt">;</span> buffer <span class="hl opt">= (</span><span class="hl kwb">char</span> <span class="hl opt">*)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>DLS_01_DIMS<span class="hl opt">,</span> DLS_01_STR_SIZE<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">==</span> buffer<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwd">HDstrcpy</span><span class="hl opt">(</span>buffer<span class="hl opt">,</span> strings<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]);</span> <span class="hl kwd">HDstrcpy</span><span class="hl opt">(</span>buffer <span class="hl opt">+</span> DLS_01_STR_SIZE<span class="hl opt">,</span> strings<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">]);</span> <span class="hl kwd">HDstrcpy</span><span class="hl opt">(</span>buffer <span class="hl opt">+</span> DLS_01_STR_SIZE <span class="hl opt">*</span> <span class="hl num">2</span><span class="hl opt">,</span> strings<span class="hl opt">[</span><span class="hl num">2</span><span class="hl opt">]);</span> <span class="hl kwd">HDstrcpy</span><span class="hl opt">(</span>buffer <span class="hl opt">+</span> DLS_01_STR_SIZE <span class="hl opt">*</span> <span class="hl num">3</span><span class="hl opt">,</span> strings<span class="hl opt">[</span><span class="hl num">3</span><span class="hl opt">]);</span> fapl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_FILE_ACCESS<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>fapl <span class="hl opt"><=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Pset_libver_bounds</span><span class="hl opt">(</span>fapl<span class="hl opt">,</span> H5F_LIBVER_LATEST<span class="hl opt">,</span> H5F_LIBVER_LATEST<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> fid <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>fid <span class="hl opt"><=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">!=</span> <span class="hl kwd">dls_01_setup_file</span><span class="hl opt">(</span>fid<span class="hl opt">))</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">!=</span> <span class="hl kwd">dls_01_write_data</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> buffer<span class="hl opt">))</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> fid <span class="hl opt">=</span> <span class="hl kwd">H5Fopen</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_RDONLY<span class="hl opt">,</span> fapl<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>fid <span class="hl opt"><=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">!=</span> <span class="hl kwd">dls_01_read_stuff</span><span class="hl opt">(</span>fid<span class="hl opt">))</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> status <span class="hl opt">=</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>fapl<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>status <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>buffer<span class="hl opt">);</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>buffer<span class="hl opt">)</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>buffer<span class="hl opt">);</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end dls_01_main() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_compact_open_close_dirty</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Verify that the two issues reported in HDFFV-10051 are fixed:</span> <span class="hl com"> * (1) Repeated open/close of a compact dataset fails due to the</span> <span class="hl com"> * increment of ndims in the dataset structure for every open.</span> <span class="hl com"> * (2) layout "dirty" flag for a compact dataset is not reset</span> <span class="hl com"> * properly after flushing the data at dataset close.</span> <span class="hl com"> * The test for issue #1 is based on compactoc.c attached</span> <span class="hl com"> * to the jira issue HDFFV-10051</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: 0</span> <span class="hl com"> * Failure: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Vailin Choi; April 2017</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_compact_open_close_dirty</span><span class="hl opt">(</span>hid_t fapl<span class="hl opt">)</span> <span class="hl opt">{</span> hid_t fid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* File ID */</span> hid_t did <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset ID */</span> hid_t sid <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataspace ID */</span> hid_t dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset creation property list */</span> hsize_t dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span><span class="hl num">10</span><span class="hl opt">};</span> <span class="hl com">/* Dimension */</span> <span class="hl kwb">int</span> wbuf<span class="hl opt">[</span><span class="hl num">10</span><span class="hl opt">];</span> <span class="hl com">/* Data buffer */</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> <span class="hl com">/* Filename */</span> <span class="hl kwb">int</span> i<span class="hl opt">;</span> <span class="hl com">/* Local index variable */</span> hbool_t dirty<span class="hl opt">;</span> <span class="hl com">/* The dirty flag */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"compact dataset repeated open/close and dirty flag"</span><span class="hl opt">);</span> <span class="hl com">/* Create a file */</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> filename<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fid <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Initialize data */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl num">10</span><span class="hl opt">;</span> i<span class="hl opt">++)</span> wbuf<span class="hl opt">[</span>i<span class="hl opt">] =</span> i<span class="hl opt">;</span> <span class="hl com">/* Create dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>sid <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set compact layout */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_layout</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> H5D_COMPACT<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_alloc_time</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> H5D_ALLOC_TIME_EARLY<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create a compact dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>did <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_COMPACT_MAX_NAME<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> sid<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Write to the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>did<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> wbuf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify the repeated open/close of the dataset will not fail */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> <span class="hl num">20</span><span class="hl opt">;</span> i<span class="hl opt">++) {</span> H5E_BEGIN_TRY <span class="hl opt">{</span> did <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_COMPACT_MAX_NAME<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>did <span class="hl opt"><</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* Open the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>did <span class="hl opt">=</span> <span class="hl kwd">H5Dopen2</span><span class="hl opt">(</span>fid<span class="hl opt">,</span> DSET_COMPACT_MAX_NAME<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Retrieve the "dirty" flag from the compact dataset layout */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5D__layout_compact_dirty_test</span><span class="hl opt">(</span>did<span class="hl opt">, &</span>dirty<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify that the "dirty" flag is false */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dirty<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close the dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close the dataset creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close the file */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>sid<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>did<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>fid<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_compact_open_close_dirty() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_versionbounds</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests various format versions.</span> <span class="hl com"> * (Currently, only virtual dataset feature)</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success: SUCCEED</span> <span class="hl com"> * Failure: FAIL</span> <span class="hl com"> * Description:</span> <span class="hl com"> * This function attempts to create a virtual dataset in all</span> <span class="hl com"> * valid combinations of low/high library format bounds. Creation</span> <span class="hl com"> * of virtual dataset should only succeed in H5F_LIBVER_V110.</span> <span class="hl com"> * -BMR, January 2018</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl ppc">#define VDS_FNAME1</span> <span class="hl pps">"virtual_file1"</span><span class="hl ppc"></span> <span class="hl ppc">#define VDS_FNAME2</span> <span class="hl pps">"virtual_file2"</span><span class="hl ppc"></span> <span class="hl ppc">#define SRC_FNAME</span> <span class="hl pps">"source_file"</span><span class="hl ppc"></span> <span class="hl ppc">#define SRC_DSET</span> <span class="hl pps">"src_dset"</span><span class="hl ppc"></span> <span class="hl ppc">#define V_DSET</span> <span class="hl pps">"v_dset"</span><span class="hl ppc"></span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_versionbounds</span><span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span> <span class="hl opt">{</span> hid_t fapl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hid_t srcfile <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Files with source dsets */</span> hid_t vfile <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* File with virtual dset */</span> hid_t dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Dataset creation property list */</span> hid_t srcspace <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Source dataspaces */</span> hid_t vspace <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Virtual dset dataspaces */</span> hid_t srcdset <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Source dataset */</span> hid_t vdset <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Virtual dataset */</span> hsize_t dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span><span class="hl num">3</span><span class="hl opt">};</span> <span class="hl com">/* Data space current size */</span> <span class="hl kwb">char</span> srcfilename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> <span class="hl kwb">char</span> vfilename1<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> <span class="hl kwb">char</span> vfilename2<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> H5F_libver_t low<span class="hl opt">,</span> high<span class="hl opt">;</span> <span class="hl com">/* File format bounds */</span> herr_t ret<span class="hl opt">;</span> <span class="hl com">/* Generic return value */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"version bounds of datasets"</span><span class="hl opt">);</span> <span class="hl com">/* Create a copy of file access property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fapl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_FILE_ACCESS<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>VDS_FNAME1<span class="hl opt">,</span> fapl<span class="hl opt">,</span> vfilename1<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> vfilename1<span class="hl opt">);</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>VDS_FNAME2<span class="hl opt">,</span> fapl<span class="hl opt">,</span> vfilename2<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> vfilename2<span class="hl opt">);</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>SRC_FNAME<span class="hl opt">,</span> fapl<span class="hl opt">,</span> srcfilename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> srcfilename<span class="hl opt">);</span> <span class="hl com">/* Create DCPL */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Clear virtual layout in DCPL */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_layout</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> H5D_VIRTUAL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create source dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>srcspace <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create virtual dataspace */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>vspace <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Add virtual layout mapping */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_virtual</span><span class="hl opt">(</span>dcpl<span class="hl opt">,</span> vspace<span class="hl opt">,</span> srcfilename<span class="hl opt">,</span> SRC_DSET<span class="hl opt">,</span> srcspace<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Loop through all the combinations of low/high library format bounds */</span> <span class="hl com">/* Create a source file and a dataset in it. Create a virtual file and</span> <span class="hl com"> virtual dataset. Creation of virtual dataset should only succeed in</span> <span class="hl com"> H5F_LIBVER_V110 */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>low <span class="hl opt">=</span> H5F_LIBVER_EARLIEST<span class="hl opt">;</span> low <span class="hl opt"><</span> H5F_LIBVER_NBOUNDS<span class="hl opt">;</span> low<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>high <span class="hl opt">=</span> H5F_LIBVER_EARLIEST<span class="hl opt">;</span> high <span class="hl opt"><</span> H5F_LIBVER_NBOUNDS<span class="hl opt">;</span> high<span class="hl opt">++) {</span> <span class="hl com">/* Set version bounds, skip for invalid low/high combination */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Pset_libver_bounds</span><span class="hl opt">(</span>fapl<span class="hl opt">,</span> low<span class="hl opt">,</span> high<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt"><</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl com">/* Invalid low/high combinations */</span> <span class="hl kwa">continue</span><span class="hl opt">;</span> <span class="hl com">/* Create a source file and dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>srcfile <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>srcfilename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>srcdset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>srcfile<span class="hl opt">,</span> SRC_DSET<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> srcspace<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create a virtual file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>vfile <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>vfilename1<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create the virtual dataset */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> vdset <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>vfile<span class="hl opt">,</span> V_DSET<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> vspace<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>vdset <span class="hl opt">></span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl com">/* dataset created successfully */</span> <span class="hl opt">{</span> <span class="hl com">/* Virtual dataset is only available starting in V110 */</span> <span class="hl kwd">VERIFY</span><span class="hl opt">(</span>high <span class="hl opt">>=</span> H5F_LIBVER_V110<span class="hl opt">,</span> TRUE<span class="hl opt">,</span> <span class="hl str">"virtual dataset"</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>vdset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> vdset <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* Close virtual file */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>vfile<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> vfile <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Close srcdset and srcfile */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>srcdset<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> srcdset <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>srcfile<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> srcfile <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* for high */</span> <span class="hl opt">}</span> <span class="hl com">/* for low */</span> <span class="hl com">/* Close dataspaces and properties */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>srcspace<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> srcspace <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>vspace<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> vspace <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>fapl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> fapl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> dcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>srcspace<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>vspace<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>fapl<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>srcdset<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>vdset<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>srcfile<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>vfile<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_versionbounds() */</span> <span class="hl com">/*-----------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_object_header_minimization_dcpl</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Test the "dataset object header minimization" property as part of</span> <span class="hl com"> * the DCPL.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success/pass: 0</span> <span class="hl com"> * Failure/error: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Jacob Smith</span> <span class="hl com"> * 2018 August 15</span> <span class="hl com"> *-----------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_object_header_minimization_dcpl</span><span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span> <span class="hl opt">{</span> hid_t dcpl_id <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> hid_t file_id <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">] =</span> <span class="hl str">""</span><span class="hl opt">;</span> hbool_t minimize <span class="hl opt">=</span> FALSE<span class="hl opt">;</span> herr_t ret<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"dcpl flags to minimize dataset object header"</span><span class="hl opt">);</span> <span class="hl com">/*********/</span> <span class="hl com">/* SETUP */</span> <span class="hl com">/*********/</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">==</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>OHMIN_FILENAME_A<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>filename<span class="hl opt">)))</span> TEST_ERROR<span class="hl opt">;</span> file_id <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>file_id <span class="hl opt">==</span> H5I_INVALID_HID<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> dcpl_id <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>dcpl_id <span class="hl opt">==</span> H5I_INVALID_HID<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/*********/</span> <span class="hl com">/* TESTS */</span> <span class="hl com">/*********/</span> <span class="hl com">/* Default value (not set explicitly) */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_dset_no_attrs_hint</span><span class="hl opt">(</span>dcpl_id<span class="hl opt">, &</span>minimize<span class="hl opt">) ==</span> FAIL<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>FALSE <span class="hl opt">!=</span> minimize<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* FALSE-set value */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_dset_no_attrs_hint</span><span class="hl opt">(</span>dcpl_id<span class="hl opt">,</span> FALSE<span class="hl opt">) ==</span> FAIL<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_dset_no_attrs_hint</span><span class="hl opt">(</span>dcpl_id<span class="hl opt">, &</span>minimize<span class="hl opt">) ==</span> FAIL<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>FALSE <span class="hl opt">!=</span> minimize<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* TRUE-set value */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_dset_no_attrs_hint</span><span class="hl opt">(</span>dcpl_id<span class="hl opt">,</span> TRUE<span class="hl opt">) ==</span> FAIL<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_dset_no_attrs_hint</span><span class="hl opt">(</span>dcpl_id<span class="hl opt">, &</span>minimize<span class="hl opt">) ==</span> FAIL<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>TRUE <span class="hl opt">!=</span> minimize<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/***************/</span> <span class="hl com">/* Error cases */</span> <span class="hl com">/***************/</span> <span class="hl com">/* Invalid DCPL ID should fail */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Pget_dset_no_attrs_hint</span><span class="hl opt">(</span>H5I_INVALID_HID<span class="hl opt">, &</span>minimize<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">==</span> SUCCEED<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Invalid DCPL ID should fail */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Pset_dset_no_attrs_hint</span><span class="hl opt">(</span>H5I_INVALID_HID<span class="hl opt">,</span> FALSE<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">==</span> SUCCEED<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Invalid DCPL ID should fail */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Pset_dset_no_attrs_hint</span><span class="hl opt">(</span>H5I_INVALID_HID<span class="hl opt">,</span> TRUE<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">==</span> SUCCEED<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* NULL out pointer should fail */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Pget_dset_no_attrs_hint</span><span class="hl opt">(</span>dcpl_id<span class="hl opt">,</span> NULL<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">==</span> SUCCEED<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/************/</span> <span class="hl com">/* TEARDOWN */</span> <span class="hl com">/************/</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file_id<span class="hl opt">) ==</span> FAIL<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl_id<span class="hl opt">) ==</span> FAIL<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl_id<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file_id<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_object_header_minimization_dcpl() */</span> <span class="hl com">/*-----------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_h5s_block</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Test the H5S_BLOCK feature.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success/pass: 0</span> <span class="hl com"> * Failure/error: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Quincey Koziol</span> <span class="hl com"> * 3 November 2020</span> <span class="hl com"> *</span> <span class="hl com"> *-----------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_h5s_block</span><span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span> <span class="hl opt">{</span> hid_t file_id <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> <span class="hl com">/* File ID */</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">] =</span> <span class="hl str">""</span><span class="hl opt">;</span> hid_t dset_id <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> <span class="hl com">/* Dataset ID */</span> hsize_t dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span><span class="hl num">20</span><span class="hl opt">};</span> <span class="hl com">/* Dataset's dataspace size */</span> hsize_t start <span class="hl opt">=</span> <span class="hl num">2</span><span class="hl opt">;</span> <span class="hl com">/* Starting offset of hyperslab selection */</span> hsize_t count <span class="hl opt">=</span> <span class="hl num">10</span><span class="hl opt">;</span> <span class="hl com">/* Count of hyperslab selection */</span> hid_t file_space_id <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> <span class="hl com">/* File dataspace ID */</span> <span class="hl kwb">int</span> buf<span class="hl opt">[</span><span class="hl num">20</span><span class="hl opt">];</span> <span class="hl com">/* Memory buffer for I/O */</span> <span class="hl kwb">unsigned</span> u<span class="hl opt">;</span> <span class="hl com">/* Local index variable */</span> herr_t ret<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"contiguous memory buffers with H5S_BLOCK"</span><span class="hl opt">);</span> <span class="hl com">/*********/</span> <span class="hl com">/* SETUP */</span> <span class="hl com">/*********/</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">==</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">27</span><span class="hl opt">],</span> H5P_DEFAULT<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>filename<span class="hl opt">)))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>H5I_INVALID_HID <span class="hl opt">== (</span>file_id <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>file_space_id <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dset_id <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file_id<span class="hl opt">,</span> <span class="hl str">"dset"</span><span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> file_space_id<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>u <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> u <span class="hl opt"><</span> <span class="hl num">20</span><span class="hl opt">;</span> u<span class="hl opt">++)</span> buf<span class="hl opt">[</span>u<span class="hl opt">] = (</span><span class="hl kwb">int</span><span class="hl opt">)</span>u<span class="hl opt">;</span> <span class="hl com">/*********/</span> <span class="hl com">/* TESTS */</span> <span class="hl com">/*********/</span> <span class="hl com">/* Check error cases */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dset_id<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5S_BLOCK<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> buf<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">==</span> SUCCEED<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Write the entire dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dset_id<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_BLOCK<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> buf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Reset the memory buffer */</span> <span class="hl kwd">HDmemset</span><span class="hl opt">(</span>buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>buf<span class="hl opt">));</span> <span class="hl com">/* Read the entire dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dset_id<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_BLOCK<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> buf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify the data read in */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>u <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> u <span class="hl opt"><</span> <span class="hl num">20</span><span class="hl opt">;</span> u<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>buf<span class="hl opt">[</span>u<span class="hl opt">] != (</span><span class="hl kwb">int</span><span class="hl opt">)</span>u<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read a hyperslab from the file to the first 10 elements of the buffer */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_hyperslab</span><span class="hl opt">(</span>file_space_id<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">, &</span>start<span class="hl opt">,</span> NULL<span class="hl opt">, &</span>count<span class="hl opt">,</span> NULL<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dset_id<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_BLOCK<span class="hl opt">,</span> file_space_id<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> buf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify the data read in */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>u <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> u <span class="hl opt"><</span> count<span class="hl opt">;</span> u<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>buf<span class="hl opt">[</span>u<span class="hl opt">] != (</span><span class="hl kwb">int</span><span class="hl opt">)(</span>u <span class="hl opt">+</span> start<span class="hl opt">))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify that reading 0 elements is handled correctly and doesn't modify buffer */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_none</span><span class="hl opt">(</span>file_space_id<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dset_id<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_BLOCK<span class="hl opt">,</span> file_space_id<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> buf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify the data read in */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>u <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> u <span class="hl opt"><</span> count<span class="hl opt">;</span> u<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>buf<span class="hl opt">[</span>u<span class="hl opt">] != (</span><span class="hl kwb">int</span><span class="hl opt">)(</span>u <span class="hl opt">+</span> start<span class="hl opt">))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/************/</span> <span class="hl com">/* TEARDOWN */</span> <span class="hl com">/************/</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>FAIL <span class="hl opt">==</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>file_space_id<span class="hl opt">))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>FAIL <span class="hl opt">==</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dset_id<span class="hl opt">))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>FAIL <span class="hl opt">==</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file_id<span class="hl opt">))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>file_space_id<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dset_id<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file_id<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_h5s_block() */</span> <span class="hl com">/*-----------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_h5s_plist</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Test the H5S_PLIST feature.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success/pass: 0</span> <span class="hl com"> * Failure/error: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Quincey Koziol</span> <span class="hl com"> * 28 January 2021</span> <span class="hl com"> *</span> <span class="hl com"> *-----------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_h5s_plist</span><span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span> <span class="hl opt">{</span> hid_t file_id <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> <span class="hl com">/* File ID */</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">] =</span> <span class="hl str">""</span><span class="hl opt">;</span> hid_t dset_id <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> <span class="hl com">/* Dataset ID */</span> hsize_t dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span><span class="hl num">20</span><span class="hl opt">};</span> <span class="hl com">/* Dataset's dataspace size */</span> hid_t dxpl_id <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> <span class="hl com">/* Dataset xfer property list ID */</span> hid_t dxpl_id_copy <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> <span class="hl com">/* Copy of dataset xfer property list ID */</span> hsize_t start <span class="hl opt">=</span> <span class="hl num">2</span><span class="hl opt">;</span> <span class="hl com">/* Starting offset of hyperslab selection */</span> hsize_t stride <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Stride of hyperslab selection */</span> hsize_t count <span class="hl opt">=</span> <span class="hl num">10</span><span class="hl opt">;</span> <span class="hl com">/* Count of hyperslab selection */</span> hsize_t start2 <span class="hl opt">=</span> <span class="hl num">14</span><span class="hl opt">;</span> <span class="hl com">/* Starting offset of hyperslab selection */</span> hsize_t count2 <span class="hl opt">=</span> <span class="hl num">4</span><span class="hl opt">;</span> <span class="hl com">/* Count of hyperslab selection */</span> hsize_t block <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl com">/* Block size of hyperslab selection */</span> hid_t file_space_id <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> <span class="hl com">/* File dataspace ID */</span> <span class="hl kwb">int</span> buf<span class="hl opt">[</span><span class="hl num">20</span><span class="hl opt">];</span> <span class="hl com">/* Memory buffer for I/O */</span> <span class="hl kwb">unsigned</span> u<span class="hl opt">;</span> <span class="hl com">/* Local index variable */</span> herr_t ret<span class="hl opt">;</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"dataset's dataspace selection for I/O in DXPL with H5S_PLIST"</span><span class="hl opt">);</span> <span class="hl com">/*********/</span> <span class="hl com">/* SETUP */</span> <span class="hl com">/*********/</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">==</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">28</span><span class="hl opt">],</span> H5P_DEFAULT<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>filename<span class="hl opt">)))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>H5I_INVALID_HID <span class="hl opt">== (</span>file_id <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>file_space_id <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> dims<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dset_id <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file_id<span class="hl opt">,</span> <span class="hl str">"dset"</span><span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> file_space_id<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dxpl_id <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_XFER<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>u <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> u <span class="hl opt"><</span> <span class="hl num">20</span><span class="hl opt">;</span> u<span class="hl opt">++)</span> buf<span class="hl opt">[</span>u<span class="hl opt">] = (</span><span class="hl kwb">int</span><span class="hl opt">)</span>u<span class="hl opt">;</span> <span class="hl com">/*********/</span> <span class="hl com">/* TESTS */</span> <span class="hl com">/*********/</span> <span class="hl com">/* Check error cases */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl com">/* Bad rank */</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Pset_dataset_io_hyperslab_selection</span><span class="hl opt">(</span>dxpl_id<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">, &</span>start<span class="hl opt">, &</span>stride<span class="hl opt">, &</span>count<span class="hl opt">,</span> <span class="hl opt">&</span>block<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">==</span> SUCCEED<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl com">/* Bad selection operator */</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Pset_dataset_io_hyperslab_selection</span><span class="hl opt">(</span>dxpl_id<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> H5S_SELECT_NOOP<span class="hl opt">, &</span>start<span class="hl opt">, &</span>stride<span class="hl opt">, &</span>count<span class="hl opt">,</span> <span class="hl opt">&</span>block<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">==</span> SUCCEED<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl com">/* Bad start pointer */</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Pset_dataset_io_hyperslab_selection</span><span class="hl opt">(</span>dxpl_id<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">,</span> NULL<span class="hl opt">, &</span>stride<span class="hl opt">, &</span>count<span class="hl opt">, &</span>block<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">==</span> SUCCEED<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl com">/* Bad stride value (stride of NULL is OK) */</span> stride <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Pset_dataset_io_hyperslab_selection</span><span class="hl opt">(</span>dxpl_id<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">, &</span>start<span class="hl opt">, &</span>stride<span class="hl opt">, &</span>count<span class="hl opt">,</span> <span class="hl opt">&</span>block<span class="hl opt">);</span> stride <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">==</span> SUCCEED<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl com">/* Bad count pointer */</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Pset_dataset_io_hyperslab_selection</span><span class="hl opt">(</span>dxpl_id<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">, &</span>start<span class="hl opt">, &</span>stride<span class="hl opt">,</span> NULL<span class="hl opt">, &</span>block<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">==</span> SUCCEED<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Block pointer is allowed to be NULL */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl com">/* H5S_PLIST for memory dataspace */</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dset_id<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_PLIST<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> buf<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">==</span> SUCCEED<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Write the entire dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dset_id<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_BLOCK<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> buf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Reset the memory buffer */</span> <span class="hl kwd">HDmemset</span><span class="hl opt">(</span>buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>buf<span class="hl opt">));</span> <span class="hl com">/* Read the entire dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dset_id<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_BLOCK<span class="hl opt">,</span> H5S_ALL<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> buf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify the data read in */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>u <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> u <span class="hl opt"><</span> <span class="hl num">20</span><span class="hl opt">;</span> u<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>buf<span class="hl opt">[</span>u<span class="hl opt">] != (</span><span class="hl kwb">int</span><span class="hl opt">)</span>u<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Reset the memory buffer */</span> <span class="hl kwd">HDmemset</span><span class="hl opt">(</span>buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>buf<span class="hl opt">));</span> <span class="hl com">/* Set valid selection in DXPL */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_dataset_io_hyperslab_selection</span><span class="hl opt">(</span>dxpl_id<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">, &</span>start<span class="hl opt">, &</span>stride<span class="hl opt">, &</span>count<span class="hl opt">, &</span>block<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read a hyperslab from the file to the first 10 elements of the buffer */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dset_id<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_BLOCK<span class="hl opt">,</span> H5S_PLIST<span class="hl opt">,</span> dxpl_id<span class="hl opt">,</span> buf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify the data read in */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>u <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> u <span class="hl opt"><</span> count<span class="hl opt">;</span> u<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>buf<span class="hl opt">[</span>u<span class="hl opt">] != (</span><span class="hl kwb">int</span><span class="hl opt">)(</span>u <span class="hl opt">+</span> start<span class="hl opt">))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Reset the memory buffer */</span> <span class="hl kwd">HDmemset</span><span class="hl opt">(</span>buf<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>buf<span class="hl opt">));</span> <span class="hl com">/* Check for copying property list w/selection */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dxpl_id_copy <span class="hl opt">=</span> <span class="hl kwd">H5Pcopy</span><span class="hl opt">(</span>dxpl_id<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read a hyperslab from the file to the first 10 elements of the buffer */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dset_id<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_BLOCK<span class="hl opt">,</span> H5S_PLIST<span class="hl opt">,</span> dxpl_id_copy<span class="hl opt">,</span> buf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify the data read in */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>u <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> u <span class="hl opt"><</span> count<span class="hl opt">;</span> u<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>buf<span class="hl opt">[</span>u<span class="hl opt">] != (</span><span class="hl kwb">int</span><span class="hl opt">)(</span>u <span class="hl opt">+</span> start<span class="hl opt">))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Attempt to 'OR' block with invalid dimensions into the selection */</span> H5E_BEGIN_TRY <span class="hl opt">{</span> ret <span class="hl opt">=</span> <span class="hl kwd">H5Pset_dataset_io_hyperslab_selection</span><span class="hl opt">(</span>dxpl_id_copy<span class="hl opt">,</span> H5S_MAX_RANK <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">,</span> H5S_SELECT_OR<span class="hl opt">, &</span>start<span class="hl opt">,</span> <span class="hl opt">&</span>stride<span class="hl opt">, &</span>count<span class="hl opt">, &</span>block<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>ret <span class="hl opt">==</span> SUCCEED<span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set new valid selection in DXPL */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_dataset_io_hyperslab_selection</span><span class="hl opt">(</span>dxpl_id_copy<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">, &</span>start<span class="hl opt">, &</span>stride<span class="hl opt">, &</span>count<span class="hl opt">,</span> <span class="hl opt">&</span>block<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read a hyperslab from the file to the first 10 elements of the buffer */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dset_id<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_BLOCK<span class="hl opt">,</span> H5S_PLIST<span class="hl opt">,</span> dxpl_id_copy<span class="hl opt">,</span> buf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify the data read in */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>u <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> u <span class="hl opt"><</span> count<span class="hl opt">;</span> u<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>buf<span class="hl opt">[</span>u<span class="hl opt">] != (</span><span class="hl kwb">int</span><span class="hl opt">)(</span>u <span class="hl opt">+</span> start<span class="hl opt">))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close the copy */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>FAIL <span class="hl opt">==</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dxpl_id_copy<span class="hl opt">))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> dxpl_id_copy <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> <span class="hl com">/* 'OR' valid block into the existing selection in original DXPL */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_dataset_io_hyperslab_selection</span><span class="hl opt">(</span>dxpl_id<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> H5S_SELECT_OR<span class="hl opt">, &</span>start2<span class="hl opt">, &</span>stride<span class="hl opt">, &</span>count2<span class="hl opt">, &</span>block<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Read a disjoint hyperslab from the file to the first 10 elements of the buffer */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dread</span><span class="hl opt">(</span>dset_id<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> H5S_BLOCK<span class="hl opt">,</span> H5S_PLIST<span class="hl opt">,</span> dxpl_id<span class="hl opt">,</span> buf<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Verify the data read in */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>u <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> u <span class="hl opt"><</span> count<span class="hl opt">;</span> u<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>buf<span class="hl opt">[</span>u<span class="hl opt">] != (</span><span class="hl kwb">int</span><span class="hl opt">)(</span>u <span class="hl opt">+</span> start<span class="hl opt">))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>u <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> u <span class="hl opt"><</span> count2<span class="hl opt">;</span> u<span class="hl opt">++)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>buf<span class="hl opt">[</span>u <span class="hl opt">+</span> count<span class="hl opt">] != (</span><span class="hl kwb">int</span><span class="hl opt">)(</span>u <span class="hl opt">+</span> start2<span class="hl opt">))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/************/</span> <span class="hl com">/* TEARDOWN */</span> <span class="hl com">/************/</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>FAIL <span class="hl opt">==</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dxpl_id<span class="hl opt">))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>FAIL <span class="hl opt">==</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>file_space_id<span class="hl opt">))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>FAIL <span class="hl opt">==</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dset_id<span class="hl opt">))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>FAIL <span class="hl opt">==</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file_id<span class="hl opt">))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dxpl_id_copy<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dxpl_id<span class="hl opt">);</span> <span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>file_space_id<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dset_id<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file_id<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_h5s_plist() */</span> <span class="hl com">/*-----------------------------------------------------------------------------</span> <span class="hl com"> * Function: test_0sized_dset_metadata_alloc</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests the metadata allocation for 0-sized datasets.</span> <span class="hl com"> *</span> <span class="hl com"> * Return: Success/pass: 0</span> <span class="hl com"> * Failure/error: -1</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Quincey Koziol</span> <span class="hl com"> * 2020 April 30</span> <span class="hl com"> *</span> <span class="hl com"> *-----------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">static</span> herr_t <span class="hl kwd">test_0sized_dset_metadata_alloc</span><span class="hl opt">(</span>hid_t fapl_id<span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">] =</span> <span class="hl str">""</span><span class="hl opt">;</span> hid_t file_id <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> hid_t fapl_id_copy <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> hid_t dset_id <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> hid_t dcpl_id <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> hid_t dcpl_id_copy <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> hid_t dset_space_id <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> hid_t buf_space_id <span class="hl opt">=</span> H5I_INVALID_HID<span class="hl opt">;</span> <span class="hl kwb">unsigned</span> new_format<span class="hl opt">;</span> <span class="hl com">/* Whether to use latest file format */</span> <span class="hl kwd">TESTING</span><span class="hl opt">(</span><span class="hl str">"allocation of metadata for 0-sized datasets"</span><span class="hl opt">);</span> <span class="hl com">/*********/</span> <span class="hl com">/* SETUP */</span> <span class="hl com">/*********/</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">==</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">26</span><span class="hl opt">],</span> fapl_id<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>filename<span class="hl opt">)))</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create DCPL for the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl_id <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_DATASET_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/*************/</span> <span class="hl com">/* RUN TESTS */</span> <span class="hl com">/*************/</span> <span class="hl com">/* Iterate over file format versions */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>new_format <span class="hl opt">=</span> FALSE<span class="hl opt">;</span> new_format <span class="hl opt"><=</span> TRUE<span class="hl opt">;</span> new_format<span class="hl opt">++) {</span> H5D_layout_t layout<span class="hl opt">;</span> <span class="hl com">/* Dataset layout type */</span> H5D_alloc_time_t alloc_time<span class="hl opt">;</span> <span class="hl com">/* Storage allocation time */</span> <span class="hl com">/* Copy the file access property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fapl_id_copy <span class="hl opt">=</span> <span class="hl kwd">H5Pcopy</span><span class="hl opt">(</span>fapl_id<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set the "use the latest version of the format" bounds for creating objects in the file */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>new_format<span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_libver_bounds</span><span class="hl opt">(</span>fapl_id_copy<span class="hl opt">,</span> H5F_LIBVER_LATEST<span class="hl opt">,</span> H5F_LIBVER_LATEST<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create test file */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>file_id <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> fapl_id_copy<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close the copy of the FAPL */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>fapl_id_copy<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Iterate over combinations of testing parameters */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>layout <span class="hl opt">=</span> H5D_COMPACT<span class="hl opt">;</span> layout <span class="hl opt"><=</span> H5D_CHUNKED<span class="hl opt">;</span> layout<span class="hl opt">++) {</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>alloc_time <span class="hl opt">=</span> H5D_ALLOC_TIME_EARLY<span class="hl opt">;</span> alloc_time <span class="hl opt"><=</span> H5D_ALLOC_TIME_INCR<span class="hl opt">;</span> alloc_time<span class="hl opt">++) {</span> <span class="hl kwb">const</span> hsize_t dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span><span class="hl num">0</span><span class="hl opt">};</span> <span class="hl com">/* Dataset dimensions */</span> <span class="hl kwb">const</span> hsize_t max_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span>H5S_UNLIMITED<span class="hl opt">};</span> <span class="hl com">/* Maximum dataset dimensions */</span> <span class="hl kwb">const</span> hsize_t chunk_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span><span class="hl num">100</span><span class="hl opt">};</span> <span class="hl com">/* Chunk dimensions */</span> <span class="hl kwb">char</span> dset_name<span class="hl opt">[</span><span class="hl num">32</span><span class="hl opt">];</span> <span class="hl com">/* Dataset name */</span> H5O_native_info_t nat_info<span class="hl opt">;</span> <span class="hl com">/* Information about the dataset */</span> <span class="hl com">/* Compact storage must have early allocation */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>H5D_COMPACT <span class="hl opt">==</span> layout <span class="hl opt">&&</span> H5D_ALLOC_TIME_EARLY <span class="hl opt">!=</span> alloc_time<span class="hl opt">)</span> <span class="hl kwa">continue</span><span class="hl opt">;</span> <span class="hl com">/* Compose dataset name */</span> <span class="hl kwd">HDsnprintf</span><span class="hl opt">(</span>dset_name<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>dset_name<span class="hl opt">),</span> <span class="hl str">"/Dataset-%u-%u"</span><span class="hl opt">, (</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>alloc_time<span class="hl opt">,</span> <span class="hl opt">(</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span>layout<span class="hl opt">);</span> <span class="hl com">/* Set up DCPL */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dcpl_id_copy <span class="hl opt">=</span> <span class="hl kwd">H5Pcopy</span><span class="hl opt">(</span>dcpl_id<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_alloc_time</span><span class="hl opt">(</span>dcpl_id_copy<span class="hl opt">,</span> alloc_time<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_layout</span><span class="hl opt">(</span>dcpl_id_copy<span class="hl opt">,</span> layout<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>H5D_CHUNKED <span class="hl opt">==</span> layout<span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_chunk</span><span class="hl opt">(</span>dcpl_id_copy<span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> chunk_dims<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create the dataspace for the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dset_space_id <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> dims<span class="hl opt">, (</span>H5D_CHUNKED <span class="hl opt">==</span> layout ? max_dims <span class="hl opt">:</span> NULL<span class="hl opt">))) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create the dataset with the appropriate parameters */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dset_id <span class="hl opt">=</span> <span class="hl kwd">H5Dcreate2</span><span class="hl opt">(</span>file_id<span class="hl opt">,</span> dset_name<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> dset_space_id<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> dcpl_id_copy<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close objects used to create dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl_id_copy<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>dset_space_id<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Retrieve & verify the dataset's index info */</span> <span class="hl kwd">HDmemset</span><span class="hl opt">(&</span>nat_info<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>nat_info<span class="hl opt">));</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Oget_native_info</span><span class="hl opt">(</span>dset_id<span class="hl opt">, &</span>nat_info<span class="hl opt">,</span> H5O_NATIVE_INFO_META_SIZE<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">!=</span> nat_info<span class="hl opt">.</span>meta_size<span class="hl opt">.</span>obj<span class="hl opt">.</span>index_size<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"dataset index allocation size is non-zero"</span><span class="hl opt">);</span> <span class="hl com">/* If chunked, try extending and verify that the index is allocated */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>H5D_CHUNKED <span class="hl opt">==</span> layout<span class="hl opt">) {</span> <span class="hl kwb">const</span> hsize_t new_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span><span class="hl num">1500</span><span class="hl opt">};</span> <span class="hl com">/* New dataset dimensions */</span> <span class="hl kwb">const</span> hsize_t mem_dims<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">] = {</span><span class="hl num">1</span><span class="hl opt">};</span> <span class="hl com">/* Memory buffer dataset dimensions */</span> <span class="hl kwb">const</span> hsize_t coord <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl com">/* Dataset selection coordinate */</span> <span class="hl kwb">int</span> val <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl com">/* Data value */</span> <span class="hl com">/* Extend dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dset_extent</span><span class="hl opt">(</span>dset_id<span class="hl opt">,</span> new_dims<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Get the dataspace for the dataset & set single point selection */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>dset_space_id <span class="hl opt">=</span> <span class="hl kwd">H5Dget_space</span><span class="hl opt">(</span>dset_id<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sselect_elements</span><span class="hl opt">(</span>dset_space_id<span class="hl opt">,</span> H5S_SELECT_SET<span class="hl opt">, (</span><span class="hl kwb">size_t</span><span class="hl opt">)</span><span class="hl num">1</span><span class="hl opt">,</span> <span class="hl opt">(</span><span class="hl kwb">const</span> hsize_t <span class="hl opt">*)&</span>coord<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Create memory dataspace, with only one element */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>buf_space_id <span class="hl opt">=</span> <span class="hl kwd">H5Screate_simple</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> mem_dims<span class="hl opt">,</span> NULL<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Write the data to the dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dwrite</span><span class="hl opt">(</span>dset_id<span class="hl opt">,</span> H5T_NATIVE_INT<span class="hl opt">,</span> buf_space_id<span class="hl opt">,</span> dset_space_id<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">, &</span>val<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Close objects used to perform I/O */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>dset_space_id<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Sclose</span><span class="hl opt">(</span>buf_space_id<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl com">/* Retrieve & verify the dataset's index info */</span> <span class="hl kwd">HDmemset</span><span class="hl opt">(&</span>nat_info<span class="hl opt">,</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>nat_info<span class="hl opt">));</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Oget_native_info</span><span class="hl opt">(</span>dset_id<span class="hl opt">, &</span>nat_info<span class="hl opt">,</span> H5O_NATIVE_INFO_META_SIZE<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">==</span> nat_info<span class="hl opt">.</span>meta_size<span class="hl opt">.</span>obj<span class="hl opt">.</span>index_size<span class="hl opt">)</span> <span class="hl kwd">FAIL_PUTS_ERROR</span><span class="hl opt">(</span><span class="hl str">"dataset index allocation size is zero"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl com">/* Close dataset */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dset_id<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/* Close test file */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file_id<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end for */</span> <span class="hl com">/************/</span> <span class="hl com">/* TEARDOWN */</span> <span class="hl com">/************/</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl_id<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> FAIL_STACK_ERROR<span class="hl opt">;</span> <span class="hl kwd">PASSED</span><span class="hl opt">();</span> <span class="hl kwa">return</span> SUCCEED<span class="hl opt">;</span> error<span class="hl opt">:</span> H5E_BEGIN_TRY <span class="hl opt">{</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dset_space_id<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>buf_space_id<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>fapl_id_copy<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl_id_copy<span class="hl opt">);</span> <span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>dcpl_id<span class="hl opt">);</span> <span class="hl kwd">H5Dclose</span><span class="hl opt">(</span>dset_id<span class="hl opt">);</span> <span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file_id<span class="hl opt">);</span> <span class="hl opt">}</span> H5E_END_TRY<span class="hl opt">;</span> <span class="hl kwa">return</span> FAIL<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end test_0sized_dset_metadata_alloc() */</span> <span class="hl com">/*-------------------------------------------------------------------------</span> <span class="hl com"> * Function: main</span> <span class="hl com"> *</span> <span class="hl com"> * Purpose: Tests the dataset interface (H5D)</span> <span class="hl com"> *</span> <span class="hl com"> * Return: EXIT_SUCCESS/EXIT_FAILURE</span> <span class="hl com"> *</span> <span class="hl com"> * Programmer: Robb Matzke</span> <span class="hl com"> * Tuesday, December 9, 1997</span> <span class="hl com"> *</span> <span class="hl com"> *-------------------------------------------------------------------------</span> <span class="hl com"> */</span> <span class="hl kwb">int</span> <span class="hl kwd">main</span><span class="hl opt">(</span><span class="hl kwb">void</span><span class="hl opt">)</span> <span class="hl opt">{</span> <span class="hl kwb">char</span> filename<span class="hl opt">[</span>FILENAME_BUF_SIZE<span class="hl opt">];</span> hid_t file<span class="hl opt">,</span> grp<span class="hl opt">,</span> fapl<span class="hl opt">,</span> fapl2<span class="hl opt">;</span> hid_t fcpl <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">,</span> fcpl2 <span class="hl opt">= -</span><span class="hl num">1</span><span class="hl opt">;</span> <span class="hl kwb">unsigned</span> new_format<span class="hl opt">;</span> <span class="hl kwb">unsigned</span> paged<span class="hl opt">;</span> <span class="hl kwb">unsigned</span> minimized_ohdr<span class="hl opt">;</span> <span class="hl kwb">int</span> mdc_nelmts<span class="hl opt">;</span> <span class="hl kwb">size_t</span> rdcc_nelmts<span class="hl opt">;</span> <span class="hl kwb">size_t</span> rdcc_nbytes<span class="hl opt">;</span> <span class="hl kwb">double</span> rdcc_w0<span class="hl opt">;</span> <span class="hl kwb">int</span> nerrors <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwb">const char</span> <span class="hl opt">*</span>envval<span class="hl opt">;</span> hbool_t contig_addr_vfd<span class="hl opt">;</span> <span class="hl com">/* Whether VFD used has a contiguous address space */</span> hbool_t driver_uses_modified_filename <span class="hl opt">=</span> <span class="hl kwd">h5_driver_uses_modified_filename</span><span class="hl opt">();</span> <span class="hl kwb">int</span> i<span class="hl opt">;</span> <span class="hl com">/* Don't run this test using certain file drivers */</span> envval <span class="hl opt">=</span> <span class="hl kwd">HDgetenv</span><span class="hl opt">(</span>HDF5_DRIVER<span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>envval <span class="hl opt">==</span> NULL<span class="hl opt">)</span> envval <span class="hl opt">=</span> <span class="hl str">"nomatch"</span><span class="hl opt">;</span> <span class="hl com">/* Current VFD that does not support contiguous address space */</span> contig_addr_vfd <span class="hl opt">= (</span>hbool_t<span class="hl opt">)(</span><span class="hl kwd">HDstrcmp</span><span class="hl opt">(</span>envval<span class="hl opt">,</span> <span class="hl str">"split"</span><span class="hl opt">) !=</span> <span class="hl num">0</span> <span class="hl opt">&&</span> <span class="hl kwd">HDstrcmp</span><span class="hl opt">(</span>envval<span class="hl opt">,</span> <span class="hl str">"multi"</span><span class="hl opt">) !=</span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl com">/* Set the random # seed */</span> <span class="hl kwd">HDsrandom</span><span class="hl opt">((</span><span class="hl kwb">unsigned</span><span class="hl opt">)</span><span class="hl kwd">HDtime</span><span class="hl opt">(</span>NULL<span class="hl opt">));</span> <span class="hl com">/* Initialize global arrays */</span> <span class="hl com">/* points */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>points_data <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">*)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>DSET_DIM1 <span class="hl opt">*</span> DSET_DIM2<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>points <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">**)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>DSET_DIM1<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>points_data<span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> DSET_DIM1<span class="hl opt">;</span> i<span class="hl opt">++)</span> points<span class="hl opt">[</span>i<span class="hl opt">] =</span> points_data <span class="hl opt">+ (</span>i <span class="hl opt">*</span> DSET_DIM2<span class="hl opt">);</span> <span class="hl com">/* check */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>check_data <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">*)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>DSET_DIM1 <span class="hl opt">*</span> DSET_DIM2<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">int</span><span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>check <span class="hl opt">= (</span><span class="hl kwb">int</span> <span class="hl opt">**)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>DSET_DIM1<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>check_data<span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> DSET_DIM1<span class="hl opt">;</span> i<span class="hl opt">++)</span> check<span class="hl opt">[</span>i<span class="hl opt">] =</span> check_data <span class="hl opt">+ (</span>i <span class="hl opt">*</span> DSET_DIM2<span class="hl opt">);</span> <span class="hl com">/* points_dbl */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>points_dbl_data <span class="hl opt">= (</span><span class="hl kwb">double</span> <span class="hl opt">*)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>DSET_DIM1 <span class="hl opt">*</span> DSET_DIM2<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">double</span><span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>points_dbl <span class="hl opt">= (</span><span class="hl kwb">double</span> <span class="hl opt">**)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>DSET_DIM1<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>points_dbl_data<span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> DSET_DIM1<span class="hl opt">;</span> i<span class="hl opt">++)</span> points_dbl<span class="hl opt">[</span>i<span class="hl opt">] =</span> points_dbl_data <span class="hl opt">+ (</span>i <span class="hl opt">*</span> DSET_DIM2<span class="hl opt">);</span> <span class="hl com">/* check_dbl */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>check_dbl_data <span class="hl opt">= (</span><span class="hl kwb">double</span> <span class="hl opt">*)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>DSET_DIM1 <span class="hl opt">*</span> DSET_DIM2<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span><span class="hl kwb">double</span><span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>NULL <span class="hl opt">== (</span>check_dbl <span class="hl opt">= (</span><span class="hl kwb">double</span> <span class="hl opt">**)</span><span class="hl kwd">HDcalloc</span><span class="hl opt">(</span>DSET_DIM1<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>check_dbl_data<span class="hl opt">))))</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>i <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> i <span class="hl opt"><</span> DSET_DIM1<span class="hl opt">;</span> i<span class="hl opt">++)</span> check_dbl<span class="hl opt">[</span>i<span class="hl opt">] =</span> check_dbl_data <span class="hl opt">+ (</span>i <span class="hl opt">*</span> DSET_DIM2<span class="hl opt">);</span> <span class="hl com">/* Testing setup */</span> <span class="hl kwd">h5_reset</span><span class="hl opt">();</span> fapl <span class="hl opt">=</span> <span class="hl kwd">h5_fileaccess</span><span class="hl opt">();</span> <span class="hl com">/* Turn off the chunk cache, so all the chunks are immediately written to disk */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pget_cache</span><span class="hl opt">(</span>fapl<span class="hl opt">, &</span>mdc_nelmts<span class="hl opt">, &</span>rdcc_nelmts<span class="hl opt">, &</span>rdcc_nbytes<span class="hl opt">, &</span>rdcc_w0<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> rdcc_nbytes <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_cache</span><span class="hl opt">(</span>fapl<span class="hl opt">,</span> mdc_nelmts<span class="hl opt">,</span> rdcc_nelmts<span class="hl opt">,</span> rdcc_nbytes<span class="hl opt">,</span> rdcc_w0<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl com">/* Copy the file access property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fapl2 <span class="hl opt">=</span> <span class="hl kwd">H5Pcopy</span><span class="hl opt">(</span>fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set the "use the latest version of the format" bounds for creating objects in the file */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_libver_bounds</span><span class="hl opt">(</span>fapl2<span class="hl opt">,</span> H5F_LIBVER_LATEST<span class="hl opt">,</span> H5F_LIBVER_LATEST<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* create a file creation property list */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fcpl <span class="hl opt">=</span> <span class="hl kwd">H5Pcreate</span><span class="hl opt">(</span>H5P_FILE_CREATE<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>fcpl2 <span class="hl opt">=</span> <span class="hl kwd">H5Pcopy</span><span class="hl opt">(</span>fcpl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Set file space strategy to paged aggregation and persisting free-space */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pset_file_space_strategy</span><span class="hl opt">(</span>fcpl2<span class="hl opt">,</span> H5F_FSPACE_STRATEGY_PAGE<span class="hl opt">,</span> TRUE<span class="hl opt">, (</span>hsize_t<span class="hl opt">)</span><span class="hl num">1</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwd">h5_fixname</span><span class="hl opt">(</span>FILENAME<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">],</span> fapl<span class="hl opt">,</span> filename<span class="hl opt">,</span> <span class="hl kwa">sizeof</span> filename<span class="hl opt">);</span> <span class="hl com">/* Test with paged aggregation enabled or not */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>paged <span class="hl opt">=</span> FALSE<span class="hl opt">;</span> paged <span class="hl opt"><=</span> TRUE<span class="hl opt">;</span> paged<span class="hl opt">++) {</span> <span class="hl com">/* Temporary: skip testing for multi/split drivers:</span> <span class="hl com"> fail file create when persisting free-space or using paged aggregation strategy */</span> <span class="hl kwa">if</span> <span class="hl opt">(!</span>contig_addr_vfd <span class="hl opt">&&</span> paged<span class="hl opt">)</span> <span class="hl kwa">continue</span><span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>minimized_ohdr <span class="hl opt">=</span> FALSE<span class="hl opt">;</span> minimized_ohdr <span class="hl opt"><=</span> TRUE<span class="hl opt">;</span> minimized_ohdr<span class="hl opt">++) {</span> <span class="hl com">/* Test with old & new format groups */</span> <span class="hl kwa">for</span> <span class="hl opt">(</span>new_format <span class="hl opt">=</span> FALSE<span class="hl opt">;</span> new_format <span class="hl opt"><=</span> TRUE<span class="hl opt">;</span> new_format<span class="hl opt">++) {</span> hid_t my_fapl<span class="hl opt">,</span> my_fcpl<span class="hl opt">;</span> <span class="hl com">/* Set the FAPL for the type of format */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>new_format<span class="hl opt">) {</span> my_fapl <span class="hl opt">=</span> fapl2<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>paged<span class="hl opt">) {</span> my_fcpl <span class="hl opt">=</span> fcpl2<span class="hl opt">;</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">"</span><span class="hl esc">\n</span><span class="hl str">Testing with new file format and paged aggregation"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> my_fcpl <span class="hl opt">=</span> fcpl<span class="hl opt">;</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">"</span><span class="hl esc">\n</span><span class="hl str">Testing with new file format and non-paged aggregation"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl com">/* end if */</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> my_fapl <span class="hl opt">=</span> fapl<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>paged<span class="hl opt">) {</span> my_fcpl <span class="hl opt">=</span> fcpl2<span class="hl opt">;</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">"Testing with old file format and paged aggregation:"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> my_fcpl <span class="hl opt">=</span> fcpl<span class="hl opt">;</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">"Testing with old file format and non-paged aggregation:"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl com">/* end else */</span> <span class="hl com">/* Create the file for this test */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>file <span class="hl opt">=</span> <span class="hl kwd">H5Fcreate</span><span class="hl opt">(</span>filename<span class="hl opt">,</span> H5F_ACC_TRUNC<span class="hl opt">,</span> my_fcpl<span class="hl opt">,</span> my_fapl<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>TRUE <span class="hl opt">==</span> minimized_ohdr<span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl num">0</span> <span class="hl opt">></span> <span class="hl kwd">H5Fset_dset_no_attrs_hint</span><span class="hl opt">(</span>file<span class="hl opt">,</span> TRUE<span class="hl opt">))</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">HDputs</span><span class="hl opt">(</span><span class="hl str">"(minimized dataset object headers with file setting)"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* Cause the library to emit initial messages */</span> <span class="hl kwa">if</span> <span class="hl opt">((</span>grp <span class="hl opt">=</span> <span class="hl kwd">H5Gcreate2</span><span class="hl opt">(</span>file<span class="hl opt">,</span> <span class="hl str">"emit diagnostics"</span><span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">,</span> H5P_DEFAULT<span class="hl opt">)) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Oset_comment</span><span class="hl opt">(</span>grp<span class="hl opt">,</span> <span class="hl str">"Causes diagnostic messages to be emitted"</span><span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Gclose</span><span class="hl opt">(</span>grp<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_create</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_simple_io</span><span class="hl opt">(</span>envval<span class="hl opt">,</span> my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_compact_io</span><span class="hl opt">(</span>my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_max_compact</span><span class="hl opt">(</span>my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_compact_open_close_dirty</span><span class="hl opt">(</span>my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_conv_buffer</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_tconv</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_filters</span><span class="hl opt">(</span>file<span class="hl opt">,</span> my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_onebyte_shuffle</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_nbit_int</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_nbit_float</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_nbit_double</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_nbit_array</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_nbit_compound</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_nbit_compound_2</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_nbit_compound_3</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_nbit_int_size</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_nbit_flt_size</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_scaleoffset_int</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_scaleoffset_int_2</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_scaleoffset_float</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_scaleoffset_float_2</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_scaleoffset_double</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_scaleoffset_double_2</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_multiopen</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_types</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_userblock_offset</span><span class="hl opt">(</span>envval<span class="hl opt">,</span> my_fapl<span class="hl opt">,</span> new_format<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(!</span>driver_uses_modified_filename<span class="hl opt">) {</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_missing_filter</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl opt">}</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_can_apply</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_can_apply2</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_optional_filters</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_set_local</span><span class="hl opt">(</span>my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_can_apply_szip</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_compare_dcpl</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_copy_dcpl</span><span class="hl opt">(</span>file<span class="hl opt">,</span> my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_filter_delete</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(!</span>driver_uses_modified_filename<span class="hl opt">) {</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_filters_endianess</span><span class="hl opt">() <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl opt">}</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_zero_dims</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_missing_chunk</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_random_chunks</span><span class="hl opt">(</span>my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl ppc">#ifndef H5_NO_DEPRECATED_SYMBOLS</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_deprec</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_NO_DEPRECATED_SYMBOLS */</span><span class="hl ppc"></span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_huge_chunks</span><span class="hl opt">(</span>my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_chunk_cache</span><span class="hl opt">(</span>my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_big_chunks_bypass_cache</span><span class="hl opt">(</span>my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_chunk_fast</span><span class="hl opt">(</span>envval<span class="hl opt">,</span> my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_reopen_chunk_fast</span><span class="hl opt">(</span>my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_chunk_fast_bug1</span><span class="hl opt">(</span>my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_chunk_expand</span><span class="hl opt">(</span>my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_layout_extend</span><span class="hl opt">(</span>my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_fixed_array</span><span class="hl opt">(</span>my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(!</span>driver_uses_modified_filename<span class="hl opt">) {</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_idx_compatible</span><span class="hl opt">() <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl opt">}</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_unfiltered_edge_chunks</span><span class="hl opt">(</span>my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_single_chunk</span><span class="hl opt">(</span>my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_large_chunk_shrink</span><span class="hl opt">(</span>my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_zero_dim_dset</span><span class="hl opt">(</span>my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_storage_size</span><span class="hl opt">(</span>my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_power2up</span><span class="hl opt">(</span>my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_swmr_non_latest</span><span class="hl opt">(</span>envval<span class="hl opt">,</span> my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_earray_hdr_fd</span><span class="hl opt">(</span>envval<span class="hl opt">,</span> my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_farray_hdr_fd</span><span class="hl opt">(</span>envval<span class="hl opt">,</span> my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_bt2_hdr_fd</span><span class="hl opt">(</span>envval<span class="hl opt">,</span> my_fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Fclose</span><span class="hl opt">(</span>file<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl com">/* end for new_format */</span> <span class="hl opt">}</span> <span class="hl com">/* end for minimized_ohdr */</span> <span class="hl opt">}</span> <span class="hl com">/* end for paged */</span> <span class="hl com">/* Close property lists */</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>fapl2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>fcpl<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">H5Pclose</span><span class="hl opt">(</span>fcpl2<span class="hl opt">) <</span> <span class="hl num">0</span><span class="hl opt">)</span> TEST_ERROR<span class="hl opt">;</span> <span class="hl com">/* Tests that do not use files */</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_scatter</span><span class="hl opt">() <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_gather</span><span class="hl opt">() <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_scatter_error</span><span class="hl opt">() <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_gather_error</span><span class="hl opt">() <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl com">/* Tests version bounds using its own file */</span> <span class="hl kwa">if</span> <span class="hl opt">(!</span>driver_uses_modified_filename<span class="hl opt">) {</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_versionbounds</span><span class="hl opt">() <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* Tests that use their own file */</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_object_header_minimization_dcpl</span><span class="hl opt">() <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_h5s_block</span><span class="hl opt">() <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_h5s_plist</span><span class="hl opt">() <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl com">/* Run misc tests */</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">dls_01_main</span><span class="hl opt">() <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">test_0sized_dset_metadata_alloc</span><span class="hl opt">(</span>fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl com">/* Verify symbol table messages are cached */</span> nerrors <span class="hl opt">+= (</span><span class="hl kwd">h5_verify_cached_stabs</span><span class="hl opt">(</span>FILENAME<span class="hl opt">,</span> fapl<span class="hl opt">) <</span> <span class="hl num">0</span> ? <span class="hl num">1</span> <span class="hl opt">:</span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>nerrors<span class="hl opt">)</span> <span class="hl kwa">goto</span> error<span class="hl opt">;</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">"All dataset tests passed.</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl ppc">#ifdef H5_HAVE_FILTER_SZIP</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwd">GetTestCleanup</span><span class="hl opt">())</span> <span class="hl kwd">HDremove</span><span class="hl opt">(</span>NOENCODER_COPY_FILENAME<span class="hl opt">);</span> <span class="hl ppc">#endif</span> <span class="hl com">/* H5_HAVE_FILTER_SZIP */</span><span class="hl ppc"></span> <span class="hl kwd">h5_cleanup</span><span class="hl opt">(</span>FILENAME<span class="hl opt">,</span> fapl<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>points<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>check<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>points_dbl<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>check_dbl<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>points_data<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>check_data<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>points_dbl_data<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>check_dbl_data<span class="hl opt">);</span> <span class="hl kwd">HDexit</span><span class="hl opt">(</span>EXIT_SUCCESS<span class="hl opt">);</span> error<span class="hl opt">:</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>points<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>check<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>points_dbl<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>check_dbl<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>points_data<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>check_data<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>points_dbl_data<span class="hl opt">);</span> <span class="hl kwd">HDfree</span><span class="hl opt">(</span>check_dbl_data<span class="hl opt">);</span> nerrors <span class="hl opt">=</span> <span class="hl kwd">MAX</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">,</span> nerrors<span class="hl opt">);</span> <span class="hl kwd">HDprintf</span><span class="hl opt">(</span><span class="hl str">"***** %d DATASET TEST%s FAILED! *****</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">,</span> nerrors<span class="hl opt">,</span> <span class="hl num">1</span> <span class="hl opt">==</span> nerrors ? <span class="hl str">""</span> <span class="hl opt">:</span> <span class="hl str">"S"</span><span class="hl opt">);</span> <span class="hl kwd">HDexit</span><span class="hl opt">(</span>EXIT_FAILURE<span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl com">/* end main() */</span> </code></pre></td></tr></table> </div> <!-- class=content --> <div class='footer'>generated by <a href='http://git.zx2c4.com/cgit/about/'>cgit v0.12</a> at 2024-10-06 02:06:28 (GMT)</div> </div> <!-- id=cgit --> </body> </html>